Menyiapkan nama domain kustom dan sertifikat SSL dengan add-on perutean aplikasi

Ingress adalah objek API yang menentukan aturan, yang memungkinkan akses eksternal ke layanan di kluster Azure Kubernetes Service (AKS). Saat Anda membuat objek Ingress yang menggunakan kelas nginx Ingress perutean aplikasi, add-on membuat, mengonfigurasi, dan mengelola satu atau beberapa pengontrol Ingress di kluster AKS Anda.

Artikel ini memperlihatkan kepada Anda cara menyiapkan konfigurasi Ingress tingkat lanjut untuk mengenkripsi lalu lintas dengan sertifikat SSL/TLS yang disimpan di Azure Key Vault, dan menggunakan Azure DNS untuk mengelola zona DNS.

Add-on perutean aplikasi dengan fitur nginx

Add-on perutean aplikasi dengan nginx memberikan hal berikut:

  • Konfigurasi mudah pengontrol nginx Ingress terkelola.
  • Integrasi dengan DNS eksternal seperti Azure DNS untuk manajemen zona global dan privat
  • Penghentian SSL dengan sertifikat yang disimpan dalam brankas kunci, seperti Azure Key Vault.

Prasyarat

  • Kluster AKS dengan add-on perutean aplikasi.
  • Azure Key Vault jika Anda ingin mengonfigurasi penghentian SSL dan menyimpan sertifikat di vault yang dihosting di Azure.
  • Azure DNS jika Anda ingin mengonfigurasi manajemen zona global dan privat dan menghostingnya di Azure.
  • Untuk melampirkan Azure Key Vault atau Azure DNS Zone, Anda memerlukan peran Pemilik, administrator akun Azure, atau administrator bersama Azure di langganan Azure Anda.

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.

Konfigurasikan kubectl untuk terhubung ke kluster Kubernetes menggunakan az aks get-credentials perintah .

az aks get-credentials --resource-group <ResourceGroupName> --name <ClusterName>

Menghentikan lalu lintas HTTPS dengan sertifikat dari Azure Key Vault

Untuk mengaktifkan dukungan untuk lalu lintas HTTPS, lihat prasyarat berikut:

Membuat Azure Key Vault untuk menyimpan sertifikat

Catatan

Jika Anda sudah memiliki Azure Key Vault, Anda dapat melewati langkah ini.

Buat Azure Key Vault menggunakan az keyvault create perintah .

az keyvault create --resource-group <ResourceGroupName> --location <Location> --name <KeyVaultName> --enable-rbac-authorization true

Membuat dan mengekspor sertifikat SSL yang ditandatangani sendiri

Untuk pengujian, Anda dapat menggunakan sertifikat publik yang ditandatangani sendiri alih-alih sertifikat yang ditandatangani Otoritas Sertifikat (CA). Jika Anda sudah memiliki sertifikat, Anda dapat melewati langkah ini.

Perhatian

Sertifikat yang ditandatangani sendiri adalah sertifikat digital yang tidak ditandatangani oleh CA pihak ketiga tepercaya. Sertifikat yang ditandatangani sendiri dibuat, dikeluarkan, dan ditandatangani oleh perusahaan atau pengembang yang bertanggung jawab atas situs web atau perangkat lunak yang ditandatangani. Inilah sebabnya mengapa sertifikat yang ditandatangani sendiri dianggap tidak aman untuk situs web dan aplikasi yang menghadap publik. Azure Key Vault memiliki kemitraan tepercaya dengan beberapa Otoritas Sertifikat.

  1. Buat sertifikat SSL yang ditandatangani sendiri untuk digunakan dengan Ingress menggunakan openssl req perintah . Pastikan Anda mengganti <Hostname> dengan nama DNS yang Anda gunakan.

    openssl req -new -x509 -nodes -out aks-ingress-tls.crt -keyout aks-ingress-tls.key -subj "/CN=<Hostname>" -addext "subjectAltName=DNS:<Hostname>"
    
  2. Ekspor sertifikat SSL dan lewati perintah kata sandi menggunakan openssl pkcs12 -export perintah .

    openssl pkcs12 -export -in aks-ingress-tls.crt -inkey aks-ingress-tls.key -out aks-ingress-tls.pfx
    

Mengimpor sertifikat ke Azure Key Vault

Impor sertifikat SSL ke Azure Key Vault menggunakan az keyvault certificate import perintah . Jika sertifikat Anda dilindungi kata sandi, Anda dapat meneruskan kata sandi melalui --password bendera.

az keyvault certificate import --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --file aks-ingress-tls.pfx [--password <certificate password if specified>]

Penting

Untuk mengaktifkan add-on untuk memuat ulang sertifikat dari Azure Key Vault saat berubah, Anda harus mengaktifkan fitur rotasi otomatis rahasia driver Secret Store CSI dengan argumen --enable-secret-rotation. Ketika autorotasi diaktifkan, driver memperbarui pemasangan pod dan rahasia Kubernetes dengan polling untuk perubahan secara berkala, berdasarkan interval polling rotasi yang Anda tentukan. Interval polling rotasi default adalah dua menit.

Mengaktifkan integrasi Azure Key Vault

Pada kluster dengan add-on perutean aplikasi diaktifkan, gunakan az aks approuting update perintah menggunakan --enable-kv argumen dan --attach-kv untuk mengaktifkan penyedia Azure Key Vault untuk Secrets Store CSI Driver dan terapkan penetapan peran yang diperlukan.

Azure Key Vault menawarkan dua sistem otorisasi: Kontrol akses berbasis peran Azure (Azure RBAC), yang beroperasi pada bidang manajemen, dan model kebijakan akses, yang beroperasi pada bidang manajemen dan bidang data. --attach-kv Operasi akan memilih model akses yang sesuai untuk digunakan.

Catatan

az aks approuting update --attach-kv Perintah menggunakan izin pengguna yang menjalankan perintah untuk membuat penetapan peran Azure Key Vault. Peran ini ditetapkan ke identitas terkelola add-on. Untuk informasi selengkapnya tentang identitas terkelola AKS, lihat Ringkasan identitas terkelola.

Ambil ID sumber daya Azure Key Vault.

KEYVAULTID=$(az keyvault show --name <KeyVaultName> --query "id" --output tsv)

Kemudian perbarui add-on perutean aplikasi untuk mengaktifkan driver CSI penyimpanan rahasia Azure Key Vault dan terapkan penetapan peran.

az aks approuting update --resource-group <ResourceGroupName> --name <ClusterName> --enable-kv --attach-kv ${KEYVAULTID}

Mengaktifkan integrasi Azure DNS

Untuk mengaktifkan dukungan untuk zona DNS, tinjau prasyarat berikut:

  • Add-on perutean aplikasi dapat dikonfigurasi untuk membuat rekaman secara otomatis di satu atau beberapa zona DNS global dan privat Azure untuk host yang ditentukan pada sumber daya Ingress. Semua zona Azure DNS global harus berada dalam grup sumber daya yang sama, dan semua zona Azure DNS privat harus berada dalam grup sumber daya yang sama. Jika Anda tidak memiliki zona Azure DNS, Anda bisa membuatnya.

Membuat zona Azure DNS publik

Catatan

Jika Anda sudah memiliki Zona Azure DNS, Anda bisa melewati langkah ini.

  1. Buat zona Azure DNS menggunakan az network dns zone create perintah .

    az network dns zone create --resource-group <ResourceGroupName> --name <ZoneName>
    

Melampirkan zona Azure DNS 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 ini 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.

    ZONEID=$(az network dns zone show --resource-group <ResourceGroupName> --name <ZoneName> --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.

    az aks approuting zone add --resource-group <ResourceGroupName> --name <ClusterName> --ids=${ZONEID} --attach-zones
    

Membuat Ingress yang menggunakan nama host dan sertifikat dari Azure Key Vault

Add-on perutean aplikasi membuat kelas Ingress pada kluster bernama webapprouting.kubernetes.azure.com. Saat Anda membuat objek Ingress dengan kelas ini, objek tersebut akan mengaktifkan add-on.

  1. Dapatkan URI sertifikat untuk digunakan di Ingress dari Azure Key Vault menggunakan az keyvault certificate show perintah .

    az keyvault certificate show --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --query "id" --output tsv
    

    Contoh output berikut menunjukkan URI sertifikat yang dikembalikan dari perintah:

    https://KeyVaultName.vault.azure.net/certificates/KeyVaultCertificateName/ea62e42260f04f17a9309d6b87aceb44
    
  2. 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 dan <KeyVaultCertificateUri> dengan URI yang dikembalikan dari perintah untuk mengkueri Azure Key Vault pada langkah 1 di atas. Nilai string untuk *<KeyVaultCertificateUri>* hanya boleh menyertakan https://yourkeyvault.vault.azure.net/certificates/certname. Versi Sertifikat di akhir string URI harus dihilangkan untuk mendapatkan versi saat ini.

    Kunci secretName di bagian tls menentukan nama rahasia yang berisi sertifikat untuk sumber daya Ingress ini. Sertifikat ini disajikan di browser ketika klien menelusuri KE URL yang ditentukan dalam <Hostname> kunci. Pastikan bahwa nilai secretName sama dengan keyvault- diikuti dengan nilai nama sumber daya Ingress (dari metadata.name). Dalam contoh YAML, secretName harus sama dengan keyvault-<your Ingress name>.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.azure.com/tls-cert-keyvault-uri: <KeyVaultCertificateUri>
      name: aks-helloworld
      namespace: hello-web-app-routing
    spec:
      ingressClassName: webapprouting.kubernetes.azure.com
      rules:
      - host: <Hostname>
        http:
          paths:
          - backend:
              service:
                name: aks-helloworld
                port:
                  number: 80
            path: /
            pathType: Prefix
      tls:
      - hosts:
        - <Hostname>
        secretName: keyvault-<your ingress name>
    
  3. 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   webapprouting.kubernetes.azure.com   myapp.contoso.com   20.51.92.19   80, 443   4m

Langkah berikutnya

Pelajari tentang memantau metrik pengontrol Ingress-nginx yang disertakan dengan add-on perutean aplikasi dengan Prometheus di Grafana sebagai bagian dari menganalisis performa dan penggunaan aplikasi Anda.