Menggunakan alamat IP publik statik dan label DNS dengan load balancer Azure Kubernetes Service (AKS)
Artikel
Saat Anda membuat sumber daya load balancer di kluster Azure Kubernetes Service (AKS), alamat IP publik yang ditetapkan untuknya hanya berlaku untuk masa pakai sumber daya tersebut. Jika Anda menghapus layanan Kube, load balancer dan alamat IP terkait juga akan dihapus. Jika ingin menetapkan alamat IP tertentu atau mempertahankan alamat IP untuk layanan Kube yang disebarkan kembali, Anda dapat membuat dan menggunakan alamat IP publik statik.
Artikel ini menunjukkan cara membuat alamat IP publik statik dan menetapkannya ke layanan Kube.
Sebelum Anda mulai
Anda memerlukan Azure CLI versi 2.0.59 atau yang lebih baru yang diinstal dan dikonfigurasi. Jalankan az --version untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.
az network public-ip create \
--resource-group <node resource group name> \
--name myAKSPublicIP \
--sku Standard \
--allocation-method static
Catatan
Jika Anda menggunakan load balancer SKU Dasar di kluster AKS Anda, gunakan Dasar untuk --sku parameter saat menentukan IP publik. Hanya IP SKU Dasar yang berfungsi dengan load balancer SKU Dasar dan hanya IP SKU Standar yang berfungsi dengan load balancer SKU Standar.
Dapatkan alamat IP publik statis menggunakan az network public-ip list perintah . Tentukan nama grup sumber daya simpul dan alamat IP publik yang Anda buat, dan kueri untuk ipAddress.
az network public-ip show --resource-group <node resource group name> --name myAKSPublicIP --query ipAddress --output tsv
Membuat layanan menggunakan alamat IP statik
Pertama, tentukan jenis identitas terkelola yang digunakan kluster AKS Anda, yang ditetapkan sistem, atau ditetapkan pengguna. Jika Anda tidak yakin, panggil perintah az aks show dan kueri untuk properti jenis identitas.
az aks show \
--name myAKSCluster \
--resource-group myResourceGroup \
--query identity.type \
--output tsv
Jika kluster menggunakan identitas terkelola, nilai properti jenis akan menjadi SystemAssigned atau UserAssigned.
Jika kluster menggunakan perwakilan layanan, nilai properti jenis akan null. Pertimbangkan untuk meningkatkan kluster Anda untuk menggunakan identitas terkelola.
Jika kluster AKS Anda menggunakan identitas terkelola yang ditetapkan sistem, kueri untuk ID utama identitas terkelola sebagai berikut:
# Get the principal ID for a system-assigned managed identity.
CLIENT_ID=$(az aks show \
--name myAKSCluster \
--resource-group myNetworkResourceGroup \
--query identity.principalId \
--output tsv)
Jika kluster AKS Anda menggunakan identitas terkelola yang ditetapkan pengguna, maka ID utama akan null. Kueri untuk ID klien identitas terkelola yang ditetapkan pengguna sebagai gantinya:
# Get the client ID for a user-assigned managed identity.
CLIENT_ID=$(az aks show \
--name myAKSCluster \
--resource-group myNetworkResourceGroup \
--query identity.userAssignedIdentities.*.clientId \
--output tsv
Tetapkan izin yang didelegasikan untuk identitas terkelola yang digunakan oleh kluster AKS untuk grup sumber daya IP publik dengan memanggil az role assignment create perintah .
# Get the resource ID for the node resource group.
RG_SCOPE=$(az group show \
--name <node resource group> \
--query id \
--output tsv)
# Assign the Network Contributor role to the managed identity,
# scoped to the node resource group.
az role assignment create \
--assignee ${CLIENT_ID} \
--role "Network Contributor" \
--scope ${RG_SCOPE}
Penting
Jika Anda menyesuaikan IP keluar, pastikan identitas kluster Anda memiliki izin ke IP publik keluar dan IP publik masuk.
Buat file bernama load-balancer-service.yaml dan salin dalam konten file YAML berikut, menyediakan alamat IP publik Anda sendiri yang dibuat pada langkah sebelumnya dan nama grup sumber daya simpul.
Penting
loadBalancerIP Menambahkan properti ke manifes YAML load balancer tidak digunakan lagi 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 mengatur anotasi layanan, Anda dapat menggunakan service.beta.kubernetes.io/azure-pip-name untuk nama IP publik, atau menggunakan service.beta.kubernetes.io/azure-load-balancer-ipv4 untuk alamat IPv4 dan service.beta.kubernetes.io/azure-load-balancer-ipv6 untuk alamat IPv6, seperti yang ditunjukkan dalam contoh YAML.
service.beta.kubernetes.io/azure-pip-name Menambahkan anotasi memastikan pembuatan LoadBalancer yang paling efisien dan sangat disarankan untuk menghindari potensi pembatasan.
Atur label DNS yang menghadap publik ke layanan menggunakan service.beta.kubernetes.io/azure-dns-label-name anotasi layanan. Ini menerbitkan nama domain yang sepenuhnya memenuhi syarat (FQDN) untuk layanan Anda menggunakan server DNS publik Azure dan domain tingkat atas. Nilai anotasi harus unik dalam lokasi Azure, jadi kami sarankan Anda menggunakan label yang cukup memenuhi syarat. Azure secara otomatis menambahkan akhiran default di lokasi yang Anda pilih, seperti <location>.cloudapp.azure.com, ke nama yang Anda berikan, membuat FQDN.
Catatan
Jika Anda ingin menerbitkan layanan di domain Anda sendiri, lihat Azure DNS dan proyek dns eksternal.
Jika alamat IP statis yang ditentukan dalam loadBalancerIP properti manifes layanan Kubernetes tidak ada atau belum dibuat di grup sumber daya simpul dan tidak ada delegasi lain yang dikonfigurasi, pembuatan layanan load balancer gagal. Untuk memecahkan masalah, tinjau peristiwa pembuatan layanan menggunakan kubectl describe perintah . Berikan nama layanan yang ditentukan dalam manifes YAML, seperti yang ditunjukkan dalam contoh berikut:
kubectl describe service azure-load-balancer
Output menunjukkan informasi tentang sumber daya layanan Kubernetes. Contoh output berikut menunjukkan Warning dalam Events: "user supplied IP address was not found." Dalam skenario ini, pastikan Anda membuat alamat IP publik statis di grup sumber daya simpul dan bahwa alamat IP yang ditentukan dalam manifes layanan Kubernetes sudah benar.
Name: azure-load-balancer
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=azure-load-balancer
Type: LoadBalancer
IP: 10.0.18.125
IP: 40.121.183.52
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 32582/TCP
Endpoints: <none>
Session Affinity: None
External Traffic Policy: Cluster
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CreatingLoadBalancer 7s (x2 over 22s) service-controller Creating load balancer
Warning CreatingLoadBalancerFailed 6s (x2 over 12s) service-controller Error creating load balancer (will retry): Failed to create load balancer for service default/azure-load-balancer: user supplied IP Address 40.121.183.52 was not found
Langkah berikutnya
Untuk kontrol lebih besar atas lalu lintas jaringan ke aplikasi Anda, gunakan addon perutean aplikasi untuk AKS. Untuk informasi selengkapnya tentang addon perutean aplikasi, lihat ingress NGINX terkelola dengan add-on perutean aplikasi.
Berkolaborasi dengan kami di GitHub
Sumber untuk konten ini dapat ditemukan di GitHub, yang juga dapat Anda gunakan untuk membuat dan meninjau masalah dan menarik permintaan. Untuk informasi selengkapnya, lihat panduan kontributor kami.
Umpan balik Azure Kubernetes Service
Azure Kubernetes Service adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: