Mengonfigurasi pengontrol ingress NGINX untuk mendukung zona DNS privat Azure dengan add-on perutean aplikasi

Artikel ini menunjukkan cara mengonfigurasi pengontrol ingress NGINX untuk bekerja dengan penyeimbang beban internal Azure dan mengonfigurasi zona Azure DNS privat untuk mengaktifkan resolusi DNS bagi titik akhir privat guna menyelesaikan domain tertentu.

Sebelum Anda mulai

Menyambungkan 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 koneksi ke kluster Anda bernama myAKSCluster di myResourceGroup menggunakan az aks get-credentials perintah .

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

Membuat jaringan virtual

Untuk menerbitkan zona DNS privat ke jaringan virtual, Anda perlu menentukan daftar jaringan virtual yang diizinkan untuk menyelesaikan rekaman dalam zona. Ini disebut tautan jaringan virtual.

Contoh berikut membuat jaringan virtual bernama myAzureVNet di grup sumber daya myResourceGroup , dan satu subnet bernama mySubnet untuk dibuat dalam VNet dengan awalan alamat tertentu.

az network vnet create \
  --name myAzureVNet \
  --resource-group myResourceGroup \
  --location eastus \
  --address-prefix 10.2.0.0/16 \
  --subnet-name mysubnet \
  --subnet-prefixes 10.2.0.0/24

Membuat zona DNS privat Azure

Catatan

Anda dapat mengonfigurasi add-on perutean aplikasi untuk membuat rekaman secara otomatis pada satu atau beberapa zona DNS global dan privat Azure untuk host yang ditentukan pada sumber daya Ingress. Semua zona Azure DNS global dan semua zona Azure DNS privat harus berada dalam grup sumber daya yang sama.

Anda membuat 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 myResourceGroup .

az network private-dns zone create --resource-group myResourceGoup --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 myDNSLink ke zona private.contoso.com untuk jaringan virtual myAzureVNet. Sertakan --registration-enabled parameter untuk menentukan tautan tidak diaktifkan pendaftaran.

az network private-dns link vnet create --resource-group myResourceGroup \
  --name myDNSLink \
  --zone-name private.contoso.com \
  --virtual-network myAzureVNet \
  --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 perutean 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 di grup sumber daya myResourceGroup.

    ZONEID=$(az network private-dns zone show --resource-group myResourceGroup --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 meneruskan daftar ID sumber daya zona DNS yang dipisahkan koma. Contoh berikut memperbarui kluster AKS myAKSCluster di grup sumber daya myResourceGroup.

    az aks approuting zone add --resource-group myResourceGroup --name myAKSCluster --ids=${ZONEID} --attach-zones
    

Membuat pengontrol ingress NGINX dengan alamat IP privat dan load balancer internal

Add-on perutean aplikasi menggunakan definisi sumber daya kustom (CRD) Kubernetes yang dipanggil 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.

Lakukan langkah-langkah berikut untuk membuat pengontrol ingress NGINX dengan Azure Load Balancer yang menghadap internal dengan 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 pengontrol 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 perutean aplikasi menggunakan anotasi pada objek Kubernetes Ingress untuk membuat sumber daya yang sesuai.

  1. Buat namespace layanan aplikasi yang dipanggil hello-web-app-routing untuk menjalankan contoh pod menggunakan kubectl create namespace perintah .

    kubectl create namespace hello-web-app-routing
    
  2. Buat penyebaran dengan menyalin manifes YAML berikut ke dalam file baru bernama deployment.yaml dan simpan file ke komputer lokal Anda.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: aks-helloworld  
      namespace: hello-web-app-routing
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: aks-helloworld
      template:
        metadata:
          labels:
            app: aks-helloworld
        spec:
          containers:
          - name: aks-helloworld
            image: mcr.microsoft.com/azuredocs/aks-helloworld:v1
            ports:
            - containerPort: 80
            env:
            - name: TITLE
              value: "Welcome to Azure Kubernetes Service (AKS)"
    
  3. Buat layanan dengan menyalin manifes YAML berikut ke dalam file baru bernama service.yaml dan simpan file ke komputer lokal Anda.

    apiVersion: v1
    kind: Service
    metadata:
      name: aks-helloworld
      namespace: hello-web-app-routing
    spec:
      type: ClusterIP
      ports:
      - port: 80
      selector:
        app: aks-helloworld
    
  4. Buat sumber daya kluster menggunakan kubectl apply perintah .

    kubectl apply -f deployment.yaml -n hello-web-app-routing
    

    Contoh output berikut menunjukkan sumber daya yang dibuat:

    deployment.apps/aks-helloworld created created
    
    kubectl apply -f service.yaml -n hello-web-app-routing
    

    Contoh output berikut menunjukkan sumber daya yang dibuat:

    service/aks-helloworld created created
    

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

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

    Perbarui <Hostname> dengan nama host DNS Anda, misalnya, helloworld.private.contoso.com. Verifikasi bahwa Anda menentukan nginx-internal untuk ingressClassName.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: aks-helloworld
      namespace: hello-web-app-routing
    spec:
      ingressClassName: nginx-internal
      rules:
      - host: <Hostname>
        http:
          paths:
          - backend:
              service:
                name: aks-helloworld
                port:
                  number: 80
            path: /
            pathType: Prefix
    
  2. Buat sumber daya kluster menggunakan kubectl apply perintah .

    kubectl apply -f ingress.yaml -n hello-web-app-routing
    

    Contoh output berikut menunjukkan sumber daya yang dibuat:

    ingress.networking.k8s.io/aks-helloworld created
    

Verifikasi bahwa Ingress terkelola telah dibuat

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

kubectl get ingress -n hello-web-app-routing

Contoh output berikut menunjukkan Ingress terkelola yang dibuat:

NAME             CLASS            HOSTS                            ADDRESS      PORTS   AGE
aks-helloworld   nginx-internal   helloworld.private.contoso.com   10.224.0.7   80      98s

Verifikasi bahwa zona DNS privat Azure telah diperbarui

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

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

Contoh output berikut menunjukkan rekaman yang dibuat:

[
  {
    "aRecords": [
      {
        "ipv4Address": "10.224.0.7"
      }
    ],
    "etag": "188f0ce5-90e3-49e6-a479-9e4053f21965",
    "fqdn": "helloworld.private.contoso.com.",
    "id": "/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx/resourceGroups/foo/providers/Microsoft.Network/privateDnsZones/private.contoso.com/A/helloworld",
    "isAutoRegistered": false,
    "name": "helloworld",
    "resourceGroup": "foo",
    "ttl": 300,
    "type": "Microsoft.Network/privateDnsZones/A"
  }
]

Langkah berikutnya

Untuk informasi konfigurasi lain yang terkait dengan enkripsi SSL pengontrol ingress NGINX tingkat lanjut lainnya dan konfigurasi sumber daya ingress, tinjau konfigurasi DNS dan SSL dan konfigurasi add-on perutean aplikasi.