Menggunakan alamat IP publik statik dan label DNS dengan load balancer Azure Kubernetes Service (AKS)

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.
  • Artikel ini membahas penggunaan IP SKU Standar dengan load balancer SKU Standar. Untuk informasi selengkapnya, lihat Jenis alamat IP dan metode alokasi di Azure.

Membuat kluster AKS

  1. Buat grup sumber daya Azure menggunakan az group create perintah .

    az group create --name myNetworkResourceGroup --location eastus
    
  2. Buat kluster AKS menggunakan az aks create perintah .

    az aks create --name myAKSCluster --resource-group myNetworkResourceGroup --generate-ssh-keys
    

Membuat alamat IP statik

  1. Dapatkan nama grup sumber daya simpul menggunakan az aks show perintah dan kueri untuk nodeResourceGroup properti .

    az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv
    
  2. Buat alamat IP publik statis di grup sumber daya simpul menggunakan az network public ip create perintah .

    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.

  3. 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

  1. Pastikan identitas kluster yang digunakan oleh kluster AKS memiliki izin yang didelegasikan ke grup sumber daya IP publik menggunakan az role assignment create perintah .

    CLIENT_ID=$(az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query identity.principalId -o tsv)
    RG_SCOPE=$(az group show --name <node resource group> --query id -o tsv)
    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.

  2. 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.

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name>
        service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP
      name: azure-load-balancer
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: azure-load-balancer
    

    Catatan

    service.beta.kubernetes.io/azure-pip-name Menambahkan anotasi memastikan pembuatan LoadBalancer yang paling efisien dan sangat disarankan untuk menghindari potensi pembatasan.

  3. 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.

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name>
        service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP
        service.beta.kubernetes.io/azure-dns-label-name: <unique-service-label>
      name: azure-load-balancer
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: azure-load-balancer
    
  4. Buat layanan dan penyebaran menggunakan kubectl apply perintah .

    kubectl apply -f load-balancer-service.yaml
    
  5. Untuk melihat label DNS untuk load balancer Anda, gunakan kubectl describe service perintah .

    kubectl describe service azure-load-balancer
    

    Label DNS akan tercantum di bawah , seperti yang Annotationsditunjukkan dalam output contoh ringkas berikut:

    Name:                    azure-load-balancer
    Namespace:               default
    Labels:                  <none>
    Annotations:             service.beta.kuberenetes.io/azure-dns-label-name: <unique-service-label>
    

Pemecahan masalah

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.