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.
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
Istio eklentisine sertifika ve anahtar girişleri sağlamak için bir Azure Key Vault kaynağına ihtiyacınız vardır.
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.
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>
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
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
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.
'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
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
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>
süresini
--rotation-poll-interval
bekleyin. Gizli anahtarıncacerts
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
İş 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
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
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>
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ükleriniistiod
denetleyin: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.
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>
Azure Kubernetes Service