Gunakan 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. Untuk menginstal atau meningkatkan, lihat Install 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 dengan 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 perintah az aks show kemudian melakukan kueri pada properti nodeResourceGroup.

    az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv
    
  2. Buat alamat IP publik statis di grup sumber daya simpul dengan 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
    

    Penting

    AKS tidak lagi mendukung Basic Load Balancer. Jika kluster Anda menggunakan Load Balancer Dasar, tingkatkan ke Standard Load Balancer sebelum Anda mengonfigurasi alamat IP publik statis.

  3. Dapatkan alamat IP publik statis dengan menggunakan az network public-ip show perintah . Tentukan nama grup sumber daya node dan alamat IP publik yang Anda buat, lalu jalankan kueri untuk mencari ipAddress.

    az network public-ip show --resource-group <node resource group name> --name myAKSPublicIP --query ipAddress --output tsv
    

Membuat layanan Kubernetes dengan alamat IP statis

  1. Buat file bernama load-balancer-service.yaml dan salin dalam konten file YAML berikut. Berikan nama sumber daya IP publik (myAKSPublicIP) yang Anda buat di bagian Buat alamat IP statis dan nama grup sumber daya simpul.

    Identitas sarana kontrol AKS memiliki izin Kontributor pada grup sumber daya simpul secara default, sehingga IP publik yang Anda buat dalam artikel ini tidak memerlukan penetapan peran lain. Jika Anda menggunakan IP publik masuk atau keluar di grup sumber daya yang berbeda, berikan identitas sarana kontrol izin yang diperlukan pada grup sumber daya tersebut. Untuk informasi selengkapnya, lihat Identitas terkelola di AKS.

    Penting

    Properti loadBalancerIP dalam manifes layanan Kubernetes tidak digunakan lagi setelah Kubernetes upstream. Layanan yang ada terus berfungsi tanpa modifikasi, tetapi gunakan anotasi layanan sebagai gantinya.

    Annotation Kegunaan
    service.beta.kubernetes.io/azure-pip-name Tentukan nama sumber daya IP publik.
    service.beta.kubernetes.io/azure-load-balancer-ipv4 Tentukan alamat IPv4.
    service.beta.kubernetes.io/azure-load-balancer-ipv6 Tentukan alamat IPv6.
    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

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

  2. 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
    
  3. Sebelum membuat layanan, pastikan kluster Anda memiliki beban kerja dengan pod yang menggunakan app: azure-load-balancer label . Manifes layanan memilih pod dengan label ini tetapi tidak membuat penyebaran.

  4. Buat layanan dengan menggunakan kubectl apply perintah .

    kubectl apply -f load-balancer-service.yaml
    
  5. Verifikasi bahwa layanan memilih setidaknya satu pod yang berjalan dan siap.

    kubectl get pods -l app=azure-load-balancer
    
  6. Untuk melihat label DNS untuk load balancer Anda, gunakan kubectl describe perintah .

    kubectl describe service azure-load-balancer
    

    Label DNS akan tercantum di bawah Annotations, seperti yang diperlihatkan dalam contoh output ringkas berikut.

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

Pecahkan masalah

Bagian ini mengasumsikan Anda menyelesaikan Buat alamat IP statis, mencoba langkah-langkah dalam Membuat layanan Kubernetes dengan alamat IP statis, dan memiliki kluster AKS yang sedang berjalan. Untuk mengambil nama grup sumber daya simpul, gunakan az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv.

Jika sumber daya IP publik bernama dalam service.beta.kubernetes.io/azure-pip-name anotasi tidak ada di grup sumber daya yang ditentukan oleh service.beta.kubernetes.io/azure-load-balancer-resource-group, atau identitas sarana kontrol AKS tidak dapat mengakses grup sumber daya tersebut, pembuatan layanan penyeimbang beban gagal. Untuk melakukan pemecahan masalah, tinjau anotasi layanan dan event pembuatan dengan menggunakan perintah kubectl describe. 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 azure-pip-name anotasi cocok dengan nama sumber daya IP publik statis dan azure-load-balancer-resource-group anotasi cocok dengan grup sumber daya yang berisinya.

Name:                     azure-load-balancer
Namespace:                default
Labels:                   <none>
Annotations:              service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name>
                          service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP
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:                <pod-ip>:80
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 yang lebih besar atas trafik jaringan ke aplikasi Anda, gunakan add-on perutean aplikasi untuk AKS. Untuk informasi selengkapnya tentang add-on perutean aplikasi, lihat Managed NGINX Ingress dengan add-on perutean aplikasi.