Gunakan load balancer internal dengan Azure Kubernetes Service (AKS)
Anda dapat membuat dan menggunakan load balancer internal untuk membatasi akses ke aplikasi Anda di Azure Kubernetes Service (AKS). Load balancer internal tidak memiliki IP publik dan membuat layanan Kubernetes hanya dapat diakses oleh aplikasi yang dapat menjangkau IP privat. Aplikasi ini dapat berada dalam VNET yang sama atau di VNET lain melalui peering VNET. Artikel ini memperlihatkan kepada Anda cara membuat dan menggunakan load balancer internal dengan AKS.
Catatan
Azure Load Balancer tersedia dalam dua SKU: Dasar dan Standar. SKU Standar digunakan secara default saat Anda membuat kluster AKS. Saat membuat jenis layanan LoadBalancer , Anda akan mendapatkan jenis load balancer yang sama seperti saat Anda memprovisikan kluster. Untuk informasi selengkapnya, lihat Perbandingan SKU Azure Load Balancer.
Sebelum Anda mulai
- Artikel ini mengasumsikan bahwa Anda memiliki kluster AKS yang ada. Jika Anda memerlukan kluster AKS, Anda dapat membuatnya menggunakan Azure CLI, Azure PowerShell, atau portal Azure.
- Anda memerlukan Azure CLI versi 2.0.59 atau yang lebih baru. Jalankan
az --version
untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI. - Jika Anda ingin menggunakan subnet atau grup sumber daya yang ada, identitas kluster AKS memerlukan izin untuk mengelola sumber daya jaringan. Untuk informasi, lihat Menggunakan jaringan kubenet dengan rentang alamat IP Anda sendiri di AKS atau Mengonfigurasi jaringan Azure CNI di AKS. Jika Anda mengonfigurasi load balancer untuk menggunakan alamat IP di subnet yang berbeda, pastikan identitas kluster AKS juga memiliki akses baca ke subnet tersebut.
- Untuk informasi selengkapnya tentang izin, lihat Mendelegasikan akses AKS ke sumber daya Azure lainnya.
Membuat penyeimbang muatan internal
Buat manifes layanan bernama
internal-lb.yaml
dengan jenisLoadBalancer
layanan danazure-load-balancer-internal
anotasi.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
Sebarkan load balancer internal menggunakan
kubectl apply
perintah . Perintah ini membuat load balancer Azure di grup sumber daya simpul yang terhubung ke jaringan virtual yang sama dengan kluster AKS Anda.kubectl apply -f internal-lb.yaml
Lihat detail layanan menggunakan
kubectl get service
perintah .kubectl get service internal-app
Alamat IP load balancer internal ditampilkan di
EXTERNAL-IP
kolom, seperti yang ditunjukkan dalam contoh output berikut. Dalam konteks ini, Eksternal mengacu pada antarmuka eksternal load balancer. Ini tidak berarti bahwa ia menerima alamat IP publik dan eksternal. Alamat IP ini ditetapkan secara dinamis dari subnet yang sama dengan kluster AKS.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.0.248.59 10.240.0.7 80:30555/TCP 2m
Tentukan alamat IP
Saat Anda menentukan alamat IP untuk load balancer, alamat IP yang ditentukan harus berada di jaringan virtual yang sama dengan kluster AKS, tetapi belum dapat ditetapkan ke sumber daya lain di jaringan virtual. Misalnya, Anda tidak boleh menggunakan alamat IP dalam rentang yang ditunjuk untuk subnet Kubernetes dalam kluster AKS. Menggunakan alamat IP yang sudah ditetapkan ke sumber daya lain di jaringan virtual yang sama dapat menyebabkan masalah dengan load balancer.
Anda dapat menggunakan az network vnet subnet list
perintah Azure CLI atau Get-AzVirtualNetworkSubnetConfig
cmdlet PowerShell untuk mendapatkan subnet di jaringan virtual Anda.
Untuk informasi selengkapnya tentang subnet, lihat Menambahkan kumpulan simpul dengan subnet unik.
Jika Anda ingin menggunakan alamat IP tertentu dengan load balancer, Anda memiliki dua opsi: mengatur anotasi layanan atau menambahkan properti LoadBalancerIP ke manifes YAML load balancer.
Penting
Menambahkan properti LoadBalancerIP ke manifes YAML load balancer tidak digunakan lagi setelah Kubernetes upstream. Meskipun penggunaan saat ini tetap sama dan layanan yang ada diharapkan berfungsi tanpa modifikasi, kami sangat menyarankan pengaturan anotasi layanan sebagai gantinya.
Atur anotasi layanan menggunakan
service.beta.kubernetes.io/azure-load-balancer-ipv4
untuk alamat IPv4 danservice.beta.kubernetes.io/azure-load-balancer-ipv6
untuk alamat IPv6.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-ipv4: 10.240.0.25 service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
Lihat detail layanan menggunakan
kubectl get service
perintah .kubectl get service internal-app
Alamat IP di
EXTERNAL-IP
kolom harus mencerminkan alamat IP yang Anda tentukan, seperti yang ditunjukkan dalam contoh output berikut:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.0.184.168 10.240.0.25 80:30225/TCP 4m
Untuk informasi selengkapnya tentang cara mengonfigurasi load balancer Anda di subnet yang berbeda, lihat Menentukan subnet yang berbeda
Menyambungkan layanan Azure Private Link ke load balancer internal
Sebelum Anda mulai
- Anda memerlukan Kubernetes versi 1.22.x atau yang lebih baru.
- Anda memerlukan grup sumber daya yang ada dengan VNet dan subnet. Grup sumber daya ini adalah tempat Anda membuat titik akhir privat. Jika Anda tidak memiliki sumber daya ini, lihat Membuat jaringan virtual dan subnet.
Membuat layanan Azure Private Link
Buat manifes layanan bernama
internal-lb-pls.yaml
dengan jenisLoadBalancer
layanan danazure-load-balancer-internal
anotasi danazure-pls-create
. Untuk opsi lainnya, lihat dokumen desain Integrasi Layanan Azure Private Link.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" service.beta.kubernetes.io/azure-pls-create: "true" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
Sebarkan load balancer internal menggunakan
kubectl apply
perintah . Perintah ini membuat load balancer Azure di grup sumber daya simpul yang terhubung ke jaringan virtual yang sama dengan kluster AKS Anda. Ini juga membuat objek Private Link Service yang terhubung ke konfigurasi IP frontend dari load balancer yang terkait dengan layanan Kubernetes.kubectl apply -f internal-lb-pls.yaml
Lihat detail layanan menggunakan
kubectl get service
perintah .kubectl get service internal-app
Alamat IP load balancer internal ditampilkan di
EXTERNAL-IP
kolom, seperti yang ditunjukkan dalam contoh output berikut. Dalam konteks ini, Eksternal mengacu pada antarmuka eksternal load balancer. Ini tidak berarti bahwa ia menerima alamat IP publik dan eksternal.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.125.17.53 10.125.0.66 80:30430/TCP 64m
Lihat detail objek Layanan Private Link menggunakan
az network private-link-service list
perintah .# Create a variable for the node resource group AKS_MC_RG=$(az aks show -g myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv) # View the details of the Private Link Service object az network private-link-service list -g $AKS_MC_RG --query "[].{Name:name,Alias:alias}" -o table
Output Anda akan terlihat mirip dengan contoh output berikut:
Name Alias -------- ------------------------------------------------------------------------- pls-xyz pls-xyz.abc123-defg-4hij-56kl-789mnop.eastus2.azure.privatelinkservice
Membuat Titik Akhir Privat pada Layanan Private Link
Titik Akhir Privat memungkinkan Anda untuk terhubung secara privat ke objek layanan Kubernetes melalui Layanan Private Link yang Anda buat.
Buat titik akhir privat menggunakan
az network private-endpoint create
perintah .# Create a variable for the private link service AKS_PLS_ID=$(az network private-link-service list -g $AKS_MC_RG --query "[].id" -o tsv) # Create the private endpoint $ az network private-endpoint create \ -g myOtherResourceGroup \ --name myAKSServicePE \ --vnet-name myOtherVNET \ --subnet pe-subnet \ --private-connection-resource-id $AKS_PLS_ID \ --connection-name connectToMyK8sService
Kustomisasi PLS melalui Anotasi
Berikut ini adalah anotasi yang dapat digunakan untuk menyesuaikan sumber daya PLS.
Anotasi | Nilai | Deskripsi | Wajib diisi | Default |
---|---|---|---|---|
service.beta.kubernetes.io/azure-pls-create |
"true" |
Boolean menunjukkan apakah PLS perlu dibuat. | Wajib | |
service.beta.kubernetes.io/azure-pls-name |
<PLS name> |
String yang menentukan nama sumber daya PLS yang akan dibuat. | Opsional | "pls-<LB frontend config name>" |
service.beta.kubernetes.io/azure-pls-resource-group |
Resource Group name |
String yang menentukan nama Grup Sumber Daya tempat sumber daya PLS akan dibuat | Opsional | MC_ resource |
service.beta.kubernetes.io/azure-pls-ip-configuration-subnet |
<Subnet name> |
String yang menunjukkan subnet tempat PLS akan disebarkan. Subnet ini harus ada di VNET yang sama dengan kumpulan backend. IP NAT PLS dialokasikan dalam subnet ini. | Opsional | Jika service.beta.kubernetes.io/azure-load-balancer-internal-subnet , subnet ILB ini digunakan. Jika tidak, subnet default dari file konfigurasi digunakan. |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count |
[1-8] |
Jumlah total IP NAT privat yang akan dialokasikan. | Opsional | 1 |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address |
"10.0.0.7 ... 10.0.0.10" |
Daftar IP IPv4 statis yang dipisahkan spasi yang akan dialokasikan. (IPv6 tidak didukung saat ini.) Jumlah total IP tidak boleh lebih besar dari jumlah ip yang ditentukan dalam service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count . Jika ada lebih sedikit IP yang ditentukan, sisanya dialokasikan secara dinamis. IP pertama dalam daftar diatur sebagai Primary . |
Opsional | Semua IP dialokasikan secara dinamis. |
service.beta.kubernetes.io/azure-pls-fqdns |
"fqdn1 fqdn2" |
Daftar fqdn yang dipisahkan spasi yang terkait dengan PLS. | Opsional | [] |
service.beta.kubernetes.io/azure-pls-proxy-protocol |
"true" atau "false" |
Boolean menunjukkan apakah protokol PROXY TCP harus diaktifkan pada PLS untuk meneruskan informasi koneksi, termasuk ID tautan dan alamat IP sumber. Perhatikan bahwa layanan backend HARUS mendukung protokol PROXY atau koneksi akan gagal. | Opsional | false |
service.beta.kubernetes.io/azure-pls-visibility |
"sub1 sub2 sub3 … subN" atau "*" |
Daftar id langganan Azure yang dipisahkan spasi tempat layanan tautan privat terlihat. Gunakan "*" untuk mengekspos PLS ke semua sub (Paling tidak ketat). |
Opsional | Daftar [] kosong yang hanya menunjukkan kontrol akses berbasis peran: Layanan tautan privat ini hanya akan tersedia untuk individu dengan izin kontrol akses berbasis peran dalam direktori Anda. (Paling ketat) |
service.beta.kubernetes.io/azure-pls-auto-approval |
"sub1 sub2 sub3 … subN" |
Daftar id langganan Azure yang dipisahkan spasi. Ini memungkinkan permintaan koneksi PE dari langganan yang tercantum ke PLS untuk disetujui secara otomatis. Ini hanya berfungsi ketika visibilitas diatur ke "*". | Opsional | [] |
Gunakan jaringan privat
Saat membuat kluster AKS, Anda dapat menentukan setelan jaringan tingkat lanjut. Pengaturan ini memungkinkan Anda untuk menyebarkan kluster ke jaringan virtual Azure dan subnet yang ada. Misalnya, Anda dapat menyebarkan kluster AKS ke jaringan privat yang terhubung ke lingkungan lokal Anda dan menjalankan layanan yang hanya dapat diakses secara internal.
Untuk informasi selengkapnya, lihat mengonfigurasi subnet jaringan virtual Anda sendiri dengan Kubenet atau dengan Azure CNI.
Anda tidak perlu membuat perubahan apa pun pada langkah-langkah sebelumnya untuk menyebarkan load balancer internal yang menggunakan jaringan privat dalam kluster AKS. Load balancer dibuat dalam grup sumber daya yang sama dengan kluster AKS Anda, tetapi sebaliknya terhubung ke jaringan virtual dan subnet privat Anda, seperti yang ditunjukkan dalam contoh berikut:
$ kubectl get service internal-app
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
internal-app LoadBalancer 10.1.15.188 10.0.0.35 80:31669/TCP 1m
Catatan
Identitas kluster yang digunakan oleh kluster AKS setidaknya harus memiliki peran Kontributor Jaringan pada sumber daya jaringan virtual. Anda dapat melihat identitas kluster menggunakan az aks show
perintah , seperti az aks show --resource-group <resource-group-name> --name <cluster-name> --query "identity"
. Anda dapat menetapkan peran Kontributor Jaringan menggunakan az role assignment create
perintah , seperti az role assignment create --assignee <identity-resource-id> --scope <virtual-network-resource-id> --role "Network Contributor"
.
Jika Anda ingin menentukan peran kustom sebagai gantinya, Anda memerlukan izin berikut:
Microsoft.Network/virtualNetworks/subnets/join/action
Microsoft.Network/virtualNetworks/subnets/read
Untuk informasi selengkapnya, lihat Menambahkan, mengubah, atau menghapus subnet jaringan virtual.
Tentukan subnet yang berbeda
azure-load-balancer-internal-subnet
Tambahkan anotasi ke layanan Anda untuk menentukan subnet untuk load balancer Anda. Subnet yang ditentukan harus berada dalam jaringan maya yang sama dengan kluster AKS Anda. Saat disebarkan, alamat load balancerEXTERNAL-IP
adalah bagian dari subnet yang ditentukan.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "apps-subnet" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
Menghapus load balancer
Load balancer dihapus ketika semua layanannya dihapus.
Seperti halnya sumber daya Kubernetes apa pun, Anda dapat langsung menghapus layanan, seperti kubectl delete service internal-app
, yang juga menghapus load balancer Azure yang mendasar.
Langkah berikutnya
Pelajari lebih lanjut tentang layanan Kubernetes di dokumen layanan Kubernetes.
Azure Kubernetes Service