Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 jaringan virtual yang sama atau di jaringan virtual lain melalui peering jaringan virtual. Artikel ini memperlihatkan kepada Anda cara membuat dan menggunakan load balancer internal dengan AKS.
Penting
Mulai 30 September 2025, Azure Kubernetes Service (AKS) tidak lagi mendukung Load Balancer Dasar. Untuk menghindari potensi gangguan layanan, sebaiknya gunakan Load Balancer Standar untuk penyebaran baru dan meningkatkan penyebaran yang ada ke Load Balancer Standar. Untuk informasi selengkapnya tentang penghentian ini, lihat masalah Penghentian GitHub dan pengumuman penghentian Pembaruan Azure. Untuk tetap mendapatkan informasi tentang pengumuman dan pembaruan, ikuti catatan rilis AKS.
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 --versionuntuk 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 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
Readakses ke subnet tersebut.- Untuk informasi selengkapnya tentang izin, lihat Mendelegasikan akses AKS ke sumber daya Azure lainnya.
Membuat penyeimbang beban internal
Buat manifes layanan bernama
internal-lb.yamldengan tipe layananLoadBalancerdan anotasiazure-load-balancer-internal.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-appSebarkan load balancer internal menggunakan perintah
kubectl apply. 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.yamlLihat detail layanan menggunakan
kubectl get serviceperintah .kubectl get service internal-appAlamat IP dari load balancer internal ditampilkan pada kolom
EXTERNAL-IP, 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 harus tersedia dalam subnet yang digunakan oleh load balancer. Secara default, load balancer menggunakan subnet yang sama dengan kluster AKS. Jangan gunakan alamat IP yang dicadangkan Azure, alamat IP yang sudah ditetapkan ke sumber daya lain, atau alamat IP dari CIDR layanan Kubernetes.
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 penyeimbang beban, Anda memiliki dua opsi: mengatur anotasi layanan atau menambahkan properti LoadBalancerIP ke manifes YAML penyeimbang beban.
Penting
Penambahan properti LoadBalancerIP ke manifes YAML load balancer akan dihentikan penggunaannya mengikuti Kubernetes upstream. Meskipun penggunaan saat ini tetap sama dan layanan yang ada diharapkan berfungsi tanpa modifikasi, kami sangat menyarankan pengaturan anotasi layanan sebagai gantinya. Untuk informasi selengkapnya tentang anotasi layanan, lihat anotasi yang didukung untuk Azure Load Balancer.
Atur anotasi layanan menggunakan
service.beta.kubernetes.io/azure-load-balancer-ipv4untuk alamat IPv4 danservice.beta.kubernetes.io/azure-load-balancer-ipv6untuk 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-appLihat detail layanan menggunakan
kubectl get serviceperintah .kubectl get service internal-appAlamat IP di
EXTERNAL-IPkolom 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 mengonfigurasi load balancer Anda di subnet yang berbeda, lihat Menentukan subnet yang berbeda.
Menyambungkan Layanan Azure Private Link ke load balancer internal AKS
persyaratan Layanan Private Link
- Kluster Anda harus menjalankan versi Kubernetes yang didukung di AKS.
- Kluster AKS Anda harus menggunakan Standard Load Balancer dengan
nodeIPConfigurationjenis kumpulan backend. Private Link Service tidak mendukung Load Balancer Dasar atau jenis kumpulan backend berbasisnodeIPIP. Untuk informasi selengkapnya, lihat batasan layanan Private Link. - Anda memerlukan grup sumber daya yang ada dengan jaringan virtual 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.
Penting
Private Link Service memiliki batasan berikut:
- Private Link Service hanya mendukung lalu lintas IPv4 dan hanya mendukung protokol transportasi TCP dan UDP.
- Jika layanan menggunakan
externalTrafficPolicy: Local, subnet Private Link Service harus berbeda dari subnet pod. Untuk menggunakan subnet yang sama, aturexternalTrafficPolicykeCluster. - Jika Anda mengaktifkan protokol PROXY dan menggunakan
externalTrafficPolicy: Local, Anda harus mengonfigurasi pemeriksaan kesehatan kustom karena pemeriksaan kesehatan default gagal.
Untuk informasi selengkapnya, lihat batasan layanan Private Link dan pembatasan integrasi layanan Azure Private Link.
Membuat koneksi Layanan Private Link
Buat manifes layanan bernama
internal-lb-pls.yamldengan jenis layananLoadBalancerserta anotasiazure-load-balancer-internaldanazure-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-appSebarkan load balancer internal menggunakan perintah
kubectl apply. 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 internal yang terkait dengan objek layanan Kubernetes.kubectl apply -f internal-lb-pls.yamlLihat detail layanan menggunakan
kubectl get serviceperintah .kubectl get service internal-appAlamat IP dari load balancer internal ditampilkan pada kolom
EXTERNAL-IP, 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 64mLihat detail objek Layanan Private Link menggunakan
az network private-link-service listperintah .# 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 tableOutput 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 ke 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 . Ganti pls-xyz dengan nama Layanan Private Link yang dikembalikan pada langkah sebelumnya.
Atur --resource-group ke grup sumber daya target tempat Anda ingin membuat titik akhir privat. Atur --vnet-name dan --subnet ke jaringan virtual dan subnet yang berisi titik akhir privat. Atur --private-connection-resource-id ke ID sumber daya layanan Private Link yang diambil di AKS_PLS_ID.
# Create variables for the Private Link Service
AKS_PLS_NAME=pls-xyz
AKS_PLS_ID=$(az network private-link-service show -g $AKS_MC_RG --name $AKS_PLS_NAME --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 layanan Private Link melalui anotasi
Anda dapat menggunakan anotasi berikut 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 diisi | |
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 dibuat | Opsional | MC_resource |
service.beta.kubernetes.io/azure-pls-ip-configuration-subnet |
<Subnet name> |
String yang menunjukkan subnet tempat PLS disebarkan. Subnet ini harus ada di jaringan virtual 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 bawaan 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 statis IPv4yang dipisahkan spasi untuk 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 spasi yang dipisahkan dari nama domain yang sepenuhnya memenuhi syarat 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. Layanan backend HARUS mendukung protokol PROXY atau koneksi gagal. | Opsional | false |
service.beta.kubernetes.io/azure-pls-visibility |
"sub1 sub2 sub3 … subN" atau "*" |
Daftar spasi yang dipisahkan dari ID langganan Azure tempat Layanan Private Link terlihat. Gunakan "*" untuk mengekspos PLS ke semua sub (Paling tidak ketat). |
Opsional | Daftar [] kosong yang hanya menunjukkan kontrol akses berbasis peran: Layanan Private Link ini hanya tersedia untuk pengguna dengan izin RBAC Azure yang diperlukan, termasuk pengguna yang berwenang di seluruh penyewa. (Paling ketat) |
service.beta.kubernetes.io/azure-pls-auto-approval |
"sub1 sub2 sub3 … subN" |
Daftar spasi yang dipisahkan dari ID langganan Azure yang permintaan koneksi PE-nya ke PLS disetujui secara otomatis. Daftar persetujuan otomatis harus merupakan subset dari daftar visibilitas. | Opsional | [] |
Menggunakan load balancer internal dengan 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 di grup sumber daya simpul untuk kluster AKS Anda dan 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 harus memiliki peran Kontributor Jaringan setidaknya 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/actionMicrosoft.Network/virtualNetworks/subnets/read
Untuk informasi selengkapnya, lihat Menambahkan, mengubah, atau menghapus subnet jaringan virtual.
Tentukan subnet yang berbeda
Tambahkan anotasi azure-load-balancer-internal-subnet ke layanan Anda untuk menentukan subnet bagi load balancer Anda. Subnet yang ditentukan harus berada dalam jaringan maya yang sama dengan kluster AKS Anda. Saat disebarkan, alamat load balancer EXTERNAL-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
Atur service.beta.kubernetes.io/azure-load-balancer-internal-subnet nilai anotasi ke string nama subnet, seperti "apps-subnet".
Menghapus penyeimbang beban
Load balancer dihapus saat Anda menghapus semua layanan Kubernetes-nya.
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.