Bagikan melalui


Colokkan sertifikat CA untuk add-on mesh layanan berbasis Istio di Azure Kubernetes Service

Dalam addon jala layanan berbasis Istio untuk Azure Kubernetes Service, secara default otoritas sertifikat Istio (CA) menghasilkan sertifikat akar dan kunci yang ditandatangani sendiri dan menggunakannya untuk menandatangani sertifikat beban kerja. Untuk melindungi kunci CA akar, Anda harus menggunakan CA akar, yang berjalan pada komputer aman offline. Anda dapat menggunakan CA akar untuk menerbitkan sertifikat perantara ke CA Istio yang berjalan di setiap kluster. CA Istio dapat menandatangani sertifikat beban kerja menggunakan sertifikat dan kunci yang ditentukan administrator, dan mendistribusikan sertifikat akar yang ditentukan administrator ke beban kerja sebagai akar kepercayaan. Artikel ini membahas cara membawa sertifikat dan kunci Anda sendiri untuk Istio CA di add-on jala layanan berbasis Istio untuk Azure Kubernetes Service.

Diagram yang memperlihatkan CA akar dan menengah dengan Istio.

Artikel ini membahas bagaimana Anda dapat mengonfigurasi otoritas sertifikat Istio dengan sertifikat akar, sertifikat penandatanganan, dan kunci yang disediakan sebagai input menggunakan Azure Key Vault ke add-on mesh layanan berbasis Istio.

Sebelum Anda mulai

Memverifikasi versi Azure CLI

Add-on memerlukan Azure CLI versi 2.57.0 atau yang lebih baru terinstal. Anda dapat menjalankan az --version untuk memverifikasi versi. Untuk menginstal atau meningkatkan, lihat [Instal Azure CLI][azure-cli-install].

Menyiapkan Azure Key Vault

  1. Anda memerlukan sumber daya Azure Key Vault untuk menyediakan sertifikat dan input kunci ke add-on Istio.

  2. Anda perlu menghasilkan sertifikat akar, sertifikat perantara, kunci perantara, dan rantai sertifikat offline. Langkah 1-3 dari sini memiliki contoh cara membuat file-file ini.

  3. Buat rahasia di Azure Key Vault menggunakan sertifikat dan kunci:

    az keyvault secret set --vault-name $AKV_NAME --name root-cert --file <path-to-folder/root-cert.pem>
    az keyvault secret set --vault-name $AKV_NAME --name ca-cert --file <path-to-folder/ca-cert.pem>
    az keyvault secret set --vault-name $AKV_NAME --name ca-key --file <path-to-folder/ca-key.pem>
    az keyvault secret set --vault-name $AKV_NAME --name cert-chain --file <path-to-folder/cert-chain.pem>
    
  4. Aktifkan penyedia Azure Key Vault untuk Secret Store CSI Driver untuk kluster Anda:

    az aks enable-addons --addons azure-keyvault-secrets-provider --resource-group $RESOURCE_GROUP --name $CLUSTER
    

    Catatan

    Saat memutar sertifikat, untuk mengontrol seberapa cepat rahasia disinkronkan ke kluster, Anda dapat menggunakan --rotation-poll-interval parameter add-on Penyedia Rahasia Azure Key Vault. Misalnya: az aks addon update --resource-group $RESOURCE_GROUP --name $CLUSTER --addon azure-keyvault-secrets-provider --enable-secret-rotation --rotation-poll-interval 20s

  5. Otorisasi identitas terkelola add-on yang ditetapkan pengguna untuk memiliki akses ke sumber daya Azure Key Vault:

    OBJECT_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER --query 'addonProfiles.azureKeyvaultSecretsProvider.identity.objectId' -o tsv)
    
    az keyvault set-policy --name $AKV_NAME --object-id $OBJECT_ID --secret-permissions get
    

    Catatan

    Jika Anda membuat Key Vault dengan Otorisasi Azure RBAC untuk model izin Anda alih-alih Kebijakan Akses Vault, ikuti instruksi di sini untuk membuat izin untuk identitas terkelola. Tambahkan penetapan peran Azure untuk Key Vault Secrets User identitas terkelola add-on yang ditetapkan pengguna.

Menyiapkan addon mesh layanan berbasis Istio dengan sertifikat CA plug-in

  1. Aktifkan addon jala layanan Istio untuk kluster AKS yang ada sambil merujuk rahasia Azure Key Vault yang dibuat sebelumnya:

    az aks mesh enable --resource-group $RESOURCE_GROUP --name $CLUSTER \
    --root-cert-object-name root-cert \
    --ca-cert-object-name ca-cert \
    --ca-key-object-name ca-key \
    --cert-chain-object-name cert-chain \
    --key-vault-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.KeyVault/vaults/$AKV_NAME
    

    Catatan

    Untuk kluster yang ada dengan addon Istio menggunakan sertifikat akar yang ditandatangani sendiri yang dihasilkan oleh Istio CA, beralih ke PLUGIN CA tidak didukung. Anda perlu menonaktifkan jala pada kluster ini terlebih dahulu dan kemudian mengaktifkannya lagi menggunakan perintah di atas untuk melewati input OS plugin.

  2. Verifikasi bahwa akan cacerts dibuat pada kluster:

    kubectl get secret -n aks-istio-system
    

    Output yang diharapkan:

    NAME                                                         TYPE                 DATA   AGE
    cacerts                                                      opaque               4      13h
    sh.helm.release.v1.azure-service-mesh-istio-discovery.v380   helm.sh/release.v1   1      2m15s
    sh.helm.release.v1.azure-service-mesh-istio-discovery.v381   helm.sh/release.v1   1      8s    
    
  3. Verifikasi bahwa sarana kontrol Istio mengambil otoritas sertifikat kustom:

    kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system | grep -v validationController | grep x509
    

    Output yang diharapkan harus mirip dengan:

    2023-11-06T15:49:15.493732Z     info    x509 cert - Issuer: "CN=Intermediate CA - A1,O=Istio,L=cluster-A1", Subject: "", SN: e191d220af347c7e164ec418d75ed19e, NotBefore: "2023-11-06T15:47:15Z", NotAfter: "2033-11-03T15:49:15Z"
    2023-11-06T15:49:15.493764Z     info    x509 cert - Issuer: "CN=Root A,O=Istio", Subject: "CN=Intermediate CA - A1,O=Istio,L=cluster-A1", SN: 885034cba2894f61036f2956fd9d0ed337dc636, NotBefore: "2023-11-04T01:40:02Z", NotAfter: "2033-11-01T01:40:02Z"
    2023-11-06T15:49:15.493795Z     info    x509 cert - Issuer: "CN=Root A,O=Istio", Subject: "CN=Root A,O=Istio", SN: 18e2ee4089c5a7363ec306627d21d9bb212bed3e, NotBefore: "2023-11-04T01:38:27Z", NotAfter: "2033-11-01T01:38:27Z"
    

Rotasi otoritas sertifikat

Anda mungkin perlu memutar otoritas sertifikat secara berkala karena alasan keamanan atau kebijakan. Bagian ini memancang Anda melalui cara menangani skenario rotasi CA perantara dan CA akar.

Rotasi otoritas sertifikat menengah

  1. Anda dapat memutar CA perantara sambil menjaga CA akar tetap sama. Perbarui rahasia di sumber daya Azure Key Vault dengan sertifikat dan file kunci baru:

    az keyvault secret set --vault-name $AKV_NAME --name root-cert --file <path-to-folder/root-cert.pem>
    az keyvault secret set --vault-name $AKV_NAME --name ca-cert --file <path-to-folder/ca-cert.pem>
    az keyvault secret set --vault-name $AKV_NAME --name ca-key --file <path-to-folder/ca-key.pem>
    az keyvault secret set --vault-name $AKV_NAME --name cert-chain --file <path/cert-chain.pem>
    
  2. Tunggu durasi --rotation-poll-intervalwaktu . Periksa apakah cacerts rahasia disegarkan pada kluster berdasarkan CA perantara baru yang diperbarui pada sumber daya Azure Key Vault:

    kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system | grep -v validationController
    

    Output yang diharapkan harus mirip dengan:

    2023-11-07T06:16:21.091844Z     info    Update Istiod cacerts
    2023-11-07T06:16:21.091901Z     info    Using istiod file format for signing ca files
    2023-11-07T06:16:21.354423Z     info    Istiod has detected the newly added intermediate CA and updated its key and certs accordingly
    2023-11-07T06:16:21.354910Z     info    x509 cert - Issuer: "CN=Intermediate CA - A2,O=Istio,L=cluster-A2", Subject: "", SN: b2753c6a23b54d8364e780bf664672ce, NotBefore: "2023-11-07T06:14:21Z", NotAfter: "2033-11-04T06:16:21Z"
    2023-11-07T06:16:21.354967Z     info    x509 cert - Issuer: "CN=Root A,O=Istio", Subject: "CN=Intermediate CA - A2,O=Istio,L=cluster-A2", SN: 17f36ace6496ac2df88e15878610a0725bcf8ae9, NotBefore: "2023-11-04T01:40:22Z", NotAfter: "2033-11-01T01:40:22Z"
    2023-11-07T06:16:21.355007Z     info    x509 cert - Issuer: "CN=Root A,O=Istio", Subject: "CN=Root A,O=Istio", SN: 18e2ee4089c5a7363ec306627d21d9bb212bed3e, NotBefore: "2023-11-04T01:38:27Z", NotAfter: "2033-11-01T01:38:27Z"
    2023-11-07T06:16:21.355012Z     info    Istiod certificates are reloaded
    
  3. Beban kerja menerima sertifikat dari sarana kontrol Istio yang berlaku selama 24 jam secara default. Jika Anda tidak menghidupkan ulang pod, semua beban kerja mendapatkan sertifikat daun baru berdasarkan CA perantara baru dalam 24 jam. Jika Anda ingin memaksa semua beban kerja ini untuk mendapatkan sertifikat daun baru segera dari CA perantara baru, maka Anda perlu memulai ulang beban kerja.

    kubectl rollout restart deployment <deployment name> -n <deployment namespace>
    

Rotasi otoritas sertifikat akar

  1. Anda perlu memperbarui rahasia Azure Key Vault dengan file sertifikat akar yang memiliki perangkaian sertifikat akar lama dan baru:

    az keyvault secret set --vault-name $AKV_NAME --name root-cert --file <path-to-folder/root-cert.pem>
    az keyvault secret set --vault-name $AKV_NAME --name ca-cert --file <path-to-folder/ca-cert.pem>
    az keyvault secret set --vault-name $AKV_NAME --name ca-key --file <path-to-folder/ca-key.pem>
    az keyvault secret set --vault-name $AKV_NAME --name cert-chain --file <path/cert-chain.pem>
    

    Isi dari root-cert.pem mengikuti format ini:

    -----BEGIN CERTIFICATE-----
    <contents of old root certificate>
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    <contents of new root certificate>
    -----END CERTIFICATE-----
    

    Periksa istiod log, setelah sertifikat disinkronkan ke kluster.

    kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system 
    

    Output yang diharapkan:

    2023-11-07T06:42:00.287916Z     info    Updating new ROOT-CA
    2023-11-07T06:42:00.287928Z     info    update root cert and generate new dns certs
    2023-11-07T06:42:00.288254Z     info    Update trust anchor with new root cert
    2023-11-07T06:42:00.288279Z     info    trustBundle     updating Source IstioCA with certs
    2023-11-07T06:42:00.288298Z     info    Istiod has detected the newly added intermediate CA and updated its key and certs accordingly
    2023-11-07T06:42:00.288303Z     info    Istiod certificates are reloaded
    
  2. Anda perlu menunggu selama 24 jam (waktu default untuk validitas sertifikat daun) atau memaksa menghidupkan ulang semua beban kerja. Dengan cara ini, semua beban kerja mengenali otoritas sertifikat lama dan baru untuk verifikasi mTLS.

    kubectl rollout restart deployment <deployment name> -n <deployment namespace>
    
  3. Anda sekarang dapat memperbarui rahasia Azure Key Vault hanya dengan CA baru (tanpa CA lama):

    az keyvault secret set --vault-name $AKV_NAME --name root-cert --file <path-to-folder/root-cert.pem>
    az keyvault secret set --vault-name $AKV_NAME --name ca-cert --file <path-to-folder/ca-cert.pem>
    az keyvault secret set --vault-name $AKV_NAME --name ca-key --file <path-to-folder/ca-key.pem>
    az keyvault secret set --vault-name $AKV_NAME --name cert-chain --file <path/cert-chain.pem>
    

    Periksa istiod log, setelah sertifikat disinkronkan ke kluster.

    kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system | grep -v validationController
    

    Output yang diharapkan:

    2023-11-07T08:01:17.780299Z     info    x509 cert - Issuer: "CN=Intermediate CA - B1,O=Istio,L=cluster-B1", Subject: "", SN: 1159747c72cc7ac7a54880cd49b8df0a, NotBefore: "2023-11-07T07:59:17Z", NotAfter: "2033-11-04T08:01:17Z"
    2023-11-07T08:01:17.780330Z     info    x509 cert - Issuer: "CN=Root B,O=Istio", Subject: "CN=Intermediate CA - B1,O=Istio,L=cluster-B1", SN: 2aba0c438652a1f9beae4249457023013948c7e2, NotBefore: "2023-11-04T01:42:12Z", NotAfter: "2033-11-01T01:42:12Z"
    2023-11-07T08:01:17.780345Z     info    x509 cert - Issuer: "CN=Root B,O=Istio", Subject: "CN=Root B,O=Istio", SN: 3f9da6ddc4cb03749c3f43243a4b701ce5eb4e96, NotBefore: "2023-11-04T01:41:54Z", NotAfter: "2033-11-01T01:41:54Z"
    

    Dari contoh output yang ditunjukkan dalam artikel ini, Anda dapat mengamati bahwa kami pindah dari Root A (digunakan saat mengaktifkan addon) ke Root B.

  4. Anda dapat menunggu lagi selama 24 jam atau memaksa menghidupkan ulang semua beban kerja. Memaksa hidupkan ulang membuat beban kerja mendapatkan sertifikat daun baru dari CA akar baru segera.

    kubectl rollout restart deployment <deployment name> -n <deployment namespace>