Mengonfigurasi NGINX Ingress Controller untuk mendukung zona DNS pribadi Azure dengan add-on pengaturan rute aplikasi

Perhatian

Jaringan SIG Kubernetes dan Komite Respons Keamanan mengumumkan penghentianproyek NGINX Ingress yang akan datang, dengan pemeliharaan berakhir pada Maret 2026. Tidak ada tindakan langsung yang diperlukan hari ini untuk kluster AKS menggunakan add-on perutean aplikasi dengan NGINX. Microsoft akan memberikan dukungan resmi untuk patch keamanan penting pada sumber daya add-on perutean aplikasi NGINX Ingress hingga November 2026.

AKS menyelaraskan dengan Kubernetes utama dengan pindah ke Gateway API sebagai standar jangka panjang untuk ingress dan manajemen trafik L7. Sebaiknya Anda mulai merencanakan jalur migrasi berdasarkan penyiapan Anda saat ini:

Artikel ini memperlihatkan kepada Anda cara mengonfigurasi pengontrol ingress NGINX untuk bekerja dengan load balancer internal Azure. Ini juga menjelaskan cara mengonfigurasi zona Azure DNS privat untuk mengaktifkan resolusi DNS untuk titik akhir privat untuk menyelesaikan domain tertentu.

Sebelum Anda mulai

Koneksi ke kluster AKS Anda

Untuk menyambungkan ke kluster Kubernetes dari komputer lokal, Anda menggunakan kubectl, klien baris perintah Kubernetes. Anda dapat menginstalnya secara lokal menggunakan perintah az aks install-cli . Jika Anda menggunakan Azure Cloud Shell, kubectl sudah terpasang.

Contoh berikut mengonfigurasi sambungan ke kluster Anda bernama aks-cluster di test-rg menggunakan perintah az aks get-credentials.

az aks get-credentials \
    --resource-group test-rg \
    --name aks-cluster

Membuat jaringan virtual

Untuk menerbitkan zona DNS privat ke jaringan virtual Anda, tentukan daftar jaringan virtual yang diizinkan untuk menyelesaikan rekaman dalam zona dengan tautan jaringan virtual.

Contoh berikut membuat jaringan virtual bernama vnet-1 di grup sumber daya test-rg , dan satu subnet bernama subnet-1 untuk dibuat dalam jaringan virtual dengan awalan alamat tertentu.

az network vnet create \
  --name vnet-1 \
  --resource-group test-rg \
  --location eastus \
  --address-prefix 10.2.0.0/16 \
  --subnet-name subnet-1 \
  --subnet-prefixes 10.2.0.0/24

Membuat zona DNS privat Azure

Catatan

Anda dapat mengonfigurasi tambahan perutean aplikasi untuk membuat catatan secara otomatis pada satu atau beberapa zona DNS global dan privat Azure untuk host yang ditetapkan pada sumber daya ingress. Semua zona Azure DNS global dan semua zona Azure DNS privat harus berada dalam grup sumber daya yang sama.

Buat zona DNS menggunakan perintah buat zona dns privat jaringan az , menentukan nama zona dan grup sumber daya untuk membuatnya. Contoh berikut membuat zona DNS bernama private.contoso.com di grup sumber daya test-rg .

az network private-dns zone create \
    --resource-group test-rg \
    --name private.contoso.com

Anda membuat tautan jaringan virtual ke zona DNS yang dibuat sebelumnya menggunakan perintah az network private-dns link vnet create . Contoh berikut membuat tautan bernama dns-link ke zona private.contoso.com untuk jaringan virtual vnet-1. Sertakan --registration-enabled parameter untuk menentukan tautan tidak diaktifkan pendaftaran.

az network private-dns link vnet create \
    --resource-group test-rg \
    --name dns-link \
    --zone-name private.contoso.com \
    --virtual-network vnet-1 \
    --registration-enabled false

Fitur pendaftaran otomatis zona privat Azure DNS mengelola catatan DNS untuk komputer virtual yang disebarkan dalam jaringan virtual. Saat Anda menautkan jaringan virtual dengan zona DNS privat dengan pengaturan ini diaktifkan, rekaman DNS akan dibuat untuk setiap komputer virtual Azure untuk simpul AKS Anda yang disebarkan di jaringan virtual.

Melampirkan zona DNS privat Azure ke add-on pengaturan rute aplikasi

Catatan

Perintah az aks approuting zone add menggunakan izin pengguna yang menjalankan perintah untuk membuat penetapan peran Zona Azure DNS. Peran Kontributor Zona DNS Privat adalah peran bawaan untuk mengelola sumber daya DNS Privat dan ditetapkan ke identitas terkelola add-on. Untuk informasi selengkapnya tentang identitas terkelola AKS, lihat Ringkasan identitas terkelola.

  1. Ambil ID sumber daya untuk zona DNS menggunakan az network dns zone show perintah dan atur output ke variabel bernama ZONEID. Contoh berikut mengkueri zona private.contoso.com dalam grup sumber daya test-rg.

    ZONEID=$(az network private-dns zone show \
    --resource-group test-rg \
    --name private.contoso.com \
    --query "id" \
    --output tsv)
    
  2. Perbarui add-on untuk mengaktifkan integrasi dengan Azure DNS menggunakan az aks approuting zone perintah . Anda dapat mengirimkan daftar ID sumber daya dari zona DNS yang dipisahkan dengan koma. Contoh berikut memperbarui kluster AKS aks-cluster di grup sumber daya test-rg.

    az aks approuting zone add \
    --resource-group test-rg \
    --name aks-cluster \
    --ids=${ZONEID} \
    --attach-zones
    

Buat sebuah pengontrol ingress NGINX dengan alamat IP privat dan sebuah load balancer internal

Add-on perutean aplikasi menggunakan definisi sumber daya kustom (CRD) Kubernetes yang disebut NginxIngressController untuk mengonfigurasi pengontrol ingress NGINX. Anda dapat membuat lebih banyak pengontrol ingress atau memodifikasi konfigurasi yang ada.

NginxIngressController CRD memiliki loadBalancerAnnotations bidang untuk mengontrol perilaku layanan pengontrol ingress NGINX dengan mengatur anotasi load balancer. Untuk informasi selengkapnya tentang anotasi load balancer, lihat Kustomisasi melalui anotasi Kubernetes.

Lakukan langkah-langkah berikut untuk membuat pengontrol ingress NGINX dengan konfigurasi Azure Load Balancer berorientasi internal menggunakan alamat IP privat.

  1. Salin manifes YAML berikut ke dalam file baru bernama nginx-internal-controller.yaml dan simpan file ke komputer lokal Anda.

    apiVersion: approuting.kubernetes.azure.com/v1alpha1
    kind: NginxIngressController
    metadata:
      name: nginx-internal
    spec:
      ingressClassName: nginx-internal
      controllerNamePrefix: nginx-internal
      loadBalancerAnnotations: 
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    
  2. Buat sumber daya pengontrol ingress NGINX menggunakan kubectl apply perintah .

    kubectl apply -f nginx-internal-controller.yaml
    

    Contoh output berikut menunjukkan sumber daya yang dibuat:

    nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal created
    
  3. Verifikasi bahwa kontroler ingress telah dibuat

    Anda dapat memverifikasi status pengontrol ingress NGINX menggunakan kubectl get nginxingresscontroller perintah .

    kubectl get nginxingresscontroller
    

    Contoh output berikut menunjukkan sumber daya yang dibuat. Mungkin perlu waktu beberapa menit agar pengontrol tersedia:

    NAME             INGRESSCLASS                         CONTROLLERNAMEPREFIX   AVAILABLE
    default          webapprouting.kubernetes.azure.com   nginx                  True
    nginx-internal   nginx-internal                       nginx-internal         True
    

Menyebarkan aplikasi

Add-on routing aplikasi menggunakan anotasi pada objek Kubernetes Ingress untuk membuat sumber daya yang sesuai.

  1. Buat namespace aplikasi yang dipanggil aks-store untuk menjalankan contoh pod menggunakan perintah kubectl create namespace.

    kubectl create namespace aks-store
    
  2. Sebarkan aplikasi penyimpanan AKS menggunakan file manifes YAML berikut:

    kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/sample-manifests/docs/app-routing/aks-store-deployments-and-services.yaml -n aks-store
    

Manifes ini membuat penyebaran dan layanan yang diperlukan untuk aplikasi AKS Store.

Membuat sumber daya Ingress yang menggunakan nama host di zona DNS privat Azure dan alamat IP privat

Perbarui host dengan nama host DNS Anda, misalnya, store-front.private.contoso.com. Verifikasi bahwa Anda menentukan nginx-internal untuk ingressClassName.

  1. Salin manifes YAML berikut ke dalam file baru bernama ingress.yaml dan simpan file ke komputer lokal Anda.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: store-front
      namespace: aks-store
    spec:
      ingressClassName: nginx-internal
      rules:
      - host: store-front.private.contoso.com
        http:
          paths:
          - backend:
              service:
                name: store-front
                port:
                  number: 80
            path: /
            pathType: Prefix
    
  2. Buat sumber daya ingress menggunakan kubectl apply perintah .

    kubectl apply -f ingress.yaml -n aks-store
    

    Contoh output berikut menunjukkan sumber daya yang dibuat:

    ingress.networking.k8s.io/store-front created
    

Verifikasi bahwa Ingress terkelola telah dibuat

Anda dapat memverifikasi bahwa Ingress terkelola dibuat dengan menggunakan perintah kubectl get ingress.

kubectl get ingress -n aks-store

Contoh output berikut menunjukkan Ingress terkelola yang dibuat:

NAME          CLASS            HOSTS                             ADDRESS   PORTS   AGE
store-front   nginx-internal   store-front.private.contoso.com             80      10s

Verifikasi bahwa zona DNS privat Azure telah diperbarui

Dalam beberapa menit, jalankan perintah az network private-dns record-set a list untuk menampilkan rekaman A untuk zona DNS privat Azure Anda. Tentukan nama grup sumber daya dan nama zona DNS. Dalam contoh ini, grup sumber daya adalah test-rg dan zona DNS private.contoso.com.

az network private-dns record-set a list \
    --resource-group test-rg \
    --zone-name private.contoso.com

Contoh output berikut menunjukkan rekaman yang dibuat:

[
  {
    "aRecords": [
      {
        "ipv4Address": "10.224.0.7"
      }
    ],
    "etag": "ecc303c5-4577-4ca2-b545-d34e160d1c2d",
    "fqdn": "store-front.private.contoso.com.",
    "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/test-rg/providers/Microsoft.Network/privateDnsZones/private.contoso.com/A/store-front",
    "isAutoRegistered": false,
    "name": "store-front",
    "resourceGroup": "test-rg",
    "ttl": 300,
    "type": "Microsoft.Network/privateDnsZones/A"
  }
]

Langkah berikutnya

Untuk informasi konfigurasi lain yang terkait dengan enkripsi SSL pengontrol ingress NGINX lanjutan lainnya dan konfigurasi resource ingress, tinjau konfigurasi DNS dan SSL dan konfigurasi add-on perutean aplikasi.