Aracılığıyla paylaş


Azure Kubernetes Service'te Istio tabanlı hizmet ağı eklentisi için CA sertifikalarını takın

Azure Kubernetes Service için Istio tabanlı hizmet ağı eklentisinde, Istio sertifika yetkilisi (CA) varsayılan olarak otomatik olarak imzalanan bir kök sertifika ve anahtar oluşturur ve bunları iş yükü sertifikalarını imzalamak için kullanır. Kök CA anahtarını korumak için, çevrimdışı güvenli bir makinede çalışan bir kök CA kullanmalısınız. Her kümede çalışan Istio CA'larına ara sertifikalar vermek için kök CA'sını kullanabilirsiniz. Istio CA, yönetici tarafından belirtilen sertifikayı ve anahtarı kullanarak iş yükü sertifikalarını imzalayabilir ve yönetici tarafından belirtilen kök sertifikayı güven kökü olarak iş yüklerine dağıtabilir. Bu makalede, Azure Kubernetes Service için Istio tabanlı hizmet ağı eklentisinde Istio CA için kendi sertifikalarınızı ve anahtarlarınızı getirme işlemi ele alınmaktadır.

Istio ile kök ve ara CA'nın gösterildiği diyagram.

Bu makalede, Istio tabanlı hizmet ağı eklentisine Azure Key Vault kullanılarak giriş olarak sağlanan bir kök sertifika, imzalama sertifikası ve anahtar ile Istio sertifika yetkilisini nasıl yapılandırabileceğiniz ele alınmaktadır.

Başlamadan önce

Azure CLI sürümünü doğrulama

Eklenti için Azure CLI 2.57.0 veya sonraki bir sürümün yüklü olması gerekir. Sürümü doğrulamak için komutunu çalıştırabilirsiniz az --version . Yüklemek veya yükseltmek için bkz. [Azure CLI yükleme][azure-cli-install].

Azure Key Vault'un kurulumunu yapma

  1. Istio eklentisine sertifika ve anahtar girişleri sağlamak için bir Azure Key Vault kaynağına ihtiyacınız vardır.

  2. Kök sertifika, ara sertifikalar, ara anahtar ve sertifika zincirini çevrimdışı oluşturmanız gerekir. Buradan 1-3 arası adımlarda bu dosyaların nasıl oluşturulacağıyla ilgili bir örnek verilmiştir.

  3. Sertifikaları ve anahtarı kullanarak Azure Key Vault'ta gizli diziler oluşturun:

    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. Kümeniz için Gizli Depolama CSI Sürücüsü için Azure Key Vault sağlayıcısını etkinleştirin:

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

    Not

    Sertifikaları döndürürken, gizli dizilerin kümeye ne kadar hızlı eşitlendiğini denetlemek için Azure Key Vault Gizli Dizi Sağlayıcısı eklentisinin parametresini kullanabilirsiniz --rotation-poll-interval . Örneğin: az aks addon update --resource-group $RESOURCE_GROUP --name $CLUSTER --addon azure-keyvault-secrets-provider --enable-secret-rotation --rotation-poll-interval 20s

  5. Eklentinin kullanıcı tarafından atanan yönetilen kimliğini Azure Key Vault kaynağına erişim izni verin:

    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 list
    

    Not

    Key Vault'unuzu Kasa Erişim İlkesi yerine izin modeliniz için Azure RBAC Yetkilendirmesi ile oluşturduysanız, yönetilen kimlik için izinler oluşturmak için buradaki yönergeleri izleyin. Eklentinin kullanıcı tarafından atanan yönetilen kimliği için için Key Vault Reader bir Azure rol ataması ekleyin.

Eklenti CA sertifikaları ile Istio tabanlı hizmet ağı eklentisini ayarlama

  1. Daha önce oluşturulan Azure Key Vault gizli dizilerine başvururken mevcut AKS kümeniz için Istio hizmet ağı eklentisini etkinleştirin:

    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
    

    Not

    Istio CA tarafından oluşturulan otomatik olarak imzalanan kök sertifika kullanan Istio eklentisi olan mevcut kümeler için eklenti CA'sına geçiş desteklenmez. Eklenti CA girişlerinden geçmek için önce bu kümelerdeki ağı devre dışı bırakmanız ve ardından yukarıdaki komutu kullanarak yeniden etkinleştirmeniz gerekir.

  2. 'nin cacerts kümede oluşturulduğunu doğrulayın:

    kubectl get secret -n aks-istio-system
    

    Beklenen çıktı:

    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. Istio denetim düzleminin özel sertifika yetkilisini seçtiğini doğrulayın:

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

    Beklenen çıkış şuna benzer olmalıdır:

    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"
    

Sertifika yetkilisi döndürme

Güvenlik veya ilke nedenleriyle sertifika yetkililerini düzenli aralıklarla döndürmeniz gerekebilir. Bu bölümde ara CA ve kök CA döndürme senaryolarının nasıl işleneceğini öğreneceksiniz.

Ara sertifika yetkilisi döndürme

  1. Kök CA'sını aynı tutarken ara CA'sını döndürebilirsiniz. Azure Key Vault kaynağındaki gizli dizileri yeni sertifika ve anahtar dosyalarıyla güncelleştirin:

    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. süresini --rotation-poll-intervalbekleyin. Gizli anahtarın cacerts Azure Key Vault kaynağında güncelleştirilen yeni ara CA'ya göre kümede yenilenip yenilenmediğini denetleyin:

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

    Beklenen çıkış şuna benzer olmalıdır:

    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. İş yükleri, Istio denetim düzleminden varsayılan olarak 24 saat geçerli olan sertifikalar alır. Podları yeniden başlatmazsanız, tüm iş yükleri 24 saat içinde yeni ara CA'ya göre yeni yaprak sertifikalar alır. Tüm bu iş yüklerini yeni ara CA'dan hemen yeni yaprak sertifikalar almak için zorlamak istiyorsanız, iş yüklerini yeniden başlatmanız gerekir.

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

Kök sertifika yetkilisi döndürme

  1. Azure Key Vault gizli dizilerini, eski ve yeni kök sertifikaların birleştirilmiş olduğu kök sertifika dosyasıyla güncelleştirmeniz gerekir:

    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>
    

    root-cert.pem İçeriği şu biçimi izleyin:

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

    Eklenti, kök sertifika güncelleştirmelerini denetlemek için kümede on dakikada bir çalışan bir CronJob içerir. Bir güncelleştirme algılarsa, güncelleştirmeleri almak için Istio denetim düzlemini (istiod dağıtım) yeniden başlatır. Kök sertifika güncelleştirmesinin algılandığını ve Istio denetim düzleminin yeniden başlatıldığını onaylamak için günlüklerini denetleyebilirsiniz:

    kubectl logs -n aks-istio-system $(kubectl get pods -n aks-istio-system | grep 'istio-cert-validator-cronjob-' | sort -k8 | tail -n 1 | awk '{print $1}')
    

    Beklenen çıktı:

    Root certificate update detected. Restarting deployment...
    deployment.apps/istiod-asm-1-17 restarted
    Deployment istiod-asm-1-17 restarted.
    

    Yeniden başlatıldıktan sonra istiod , güven etki alanına iki sertifika eklendiğini göstermelidir:

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

    Beklenen çıktı:

    2023-11-07T06:42:00.287916Z     info    Using istiod file format for signing ca files
    2023-11-07T06:42:00.287928Z     info    Use plugged-in cert at etc/cacerts/ca-key.pem
    2023-11-07T06:42:00.288254Z     info    x509 cert - Issuer: "CN=Intermediate CA - A2,O=Istio,L=cluster-A2", Subject: "", SN: 286451ca8ff7bf9e6696f56bef829d42, NotBefore: "2023-11-07T06:40:00Z", NotAfter: "2033-11-04T06:42:00Z"
    2023-11-07T06:42:00.288279Z     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:42:00.288298Z     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:42:00.288303Z     info    Istiod certificates are reloaded
    2023-11-07T06:42:00.288365Z     info    spiffe  Added 2 certs to trust domain cluster.local in peer cert verifier
    
  2. 24 saat beklemeniz (yaprak sertifika geçerliliği için varsayılan süre) veya tüm iş yüklerinin yeniden başlatılmasını zorlamanız gerekir. Bu şekilde, tüm iş yükleri mTLS doğrulaması için hem eski hem de yeni sertifika yetkililerini tanır.

    kubectl rollout restart deployment <deployment name> -n <deployment namespace>
    
  3. Artık Azure Key Vault gizli dizilerini yalnızca yeni CA ile güncelleştirebilirsiniz (eski CA olmadan):

    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>
    

    Kök sertifika güncelleştirmesinin CronJob algılanması ve yeniden başlatılmasını onaylamak için günlüklerini istioddenetleyin:

    kubectl logs -n aks-istio-system $(kubectl get pods -n aks-istio-system | grep 'istio-cert-validator-cronjob-' | sort -k8 | tail -n 1 | awk '{print $1}')
    

    Beklenen çıktı:

    Root certificate update detected. Restarting deployment...
    deployment.apps/istiod-asm-1-17 restarted
    Deployment istiod-asm-1-17 restarted.
    

    Güncelleştirildikten sonra istiod yalnızca yeni kök CA kullanımını onaylaması gerekir:

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

    Beklenen çıktı:

    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"
    

    Bu makalede gösterilen örnek çıkışlardan, Kök A'dan (eklenti etkinleştirilirken kullanılır) Kök B'ye taşındığımızı görebilirsiniz.

  4. 24 saat bekleyebilir veya tüm iş yüklerinin yeniden başlatılmasını zorlayabilirsiniz. Yeniden başlatmayı zorlamak, iş yüklerinin yeni kök CA'dan yeni yaprak sertifikaları hemen almasını sağlar.

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