Azure Kubernetes Service üzerinde Istio tabanlı hizmet ağı eklentisi için eklenti CA sertifikaları

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 kullanarak kök sertifika, imza sertifikası ve anahtar şeklinde sağlanan girdilerle 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, Azure CLI 2.57.0 veya sonraki bir sürümün yüklenmesini gerektirir. 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 Key Vault ayarlama

  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'da 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 --rotation-poll-interval parametresini kullanabilirsiniz. Ö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. Key Vault, izin modeli olarak Azure RBAC kullanıyorsa, eklentinin kullanıcı tarafından atanan yönetilen kimliği için "Key Vault Sır Kullanıcısı" Azure rolünü atamak adına buradaki yönergeleri izleyin. Alternatif olarak, anahtar kasanız kasa erişim ilkesi izin modelini kullanıyorsa, eklentinin kullanıcı tarafından atanan yönetilen kimliğine Azure Key Vault kaynağına erişim izni vermek için erişim politikasını kullanarak yetkilendirin.

    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
    

CA sertifikalarıyla Istio tabanlı servis ağı eklentisini kurma

  1. Daha önce oluşturulmuş 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. Istio denetim düzleminin, özel sertifika otoritesini 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 yenileme

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 yenileme

  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. --rotation-poll-interval süresi kadar bekleyin. Sertifikaların, Azure Key Vault kaynağında güncelleştirilen yeni ara CA temelinde 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üklerinin yeni ara sertifika otoritesinden yeni yaprak sertifikalarını hemen almak zorunda olması gerekiyorsa, iş yüklerini yeniden başlatmanız gerekir.

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

Kök sertifika yetkilisi yenileme

  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 içeriği bu biçimi takip eder:

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

    Sertifikalar kümeyle eşitlendikten sonra günlükleri denetleyin istiod .

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

    Beklenen çıktı:

    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. 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>
    

    Sertifikalar kümeyle eşitlendikten sonra günlükleri denetleyin istiod .

    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 (eklentiyi etkinleştirirken kullanılır) Kök B'ye taşındığımızı görebilirsiniz.