Anslut CA-certifikat för Istio-baserat tillägg för tjänstnät i Azure Kubernetes Service
I det Istio-baserade tjänstnättillägget för Azure Kubernetes Service genererar Istio-certifikatutfärdaren (CA) som standard ett självsignerat rotcertifikat och en nyckel och använder dem för att signera arbetsbelastningscertifikaten. För att skydda rotcertifikatutfärdarnyckeln bör du använda en rotcertifikatutfärdare som körs på en säker dator offline. Du kan använda rotcertifikatutfärdare för att utfärda mellanliggande certifikat till de Istio-certifikatutfärdare som körs i varje kluster. En Istio CA kan signera arbetsbelastningscertifikat med hjälp av det administratörsdefinierade certifikatet och nyckeln och distribuera ett administratörsspecifikt rotcertifikat till arbetsbelastningarna som rot av förtroende. Den här artikeln beskriver hur du tar med egna certifikat och nycklar för Istio CA i det Istio-baserade tjänstnättillägget för Azure Kubernetes Service.
Den här artikeln beskriver hur du kan konfigurera Istio-certifikatutfärdare med ett rotcertifikat, signeringscertifikat och en nyckel som tillhandahålls som indata med hjälp av Azure Key Vault till det Istio-baserade service mesh-tillägget.
Innan du börjar
Verifiera Azure CLI-versionen
Tillägget kräver Azure CLI version 2.57.0 eller senare installerat. Du kan köra az --version
för att verifiera versionen. Information om hur du installerar eller uppgraderar finns i [Installera Azure CLI][azure-cli-install].
Konfigurera Azure Key Vault
Du behöver en Azure Key Vault-resurs för att ange certifikatet och nyckelindata till Istio-tillägget.
Du måste generera rotcertifikat, mellanliggande certifikat, mellanliggande nyckel och certifikatkedjan offline. Steg 1–3 härifrån innehåller ett exempel på hur du genererar dessa filer.
Skapa hemligheter i Azure Key Vault med hjälp av certifikaten och nyckeln:
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>
Aktivera Azure Key Vault-providern för CSI-drivrutinen för Secret Store för klustret:
az aks enable-addons --addons azure-keyvault-secrets-provider --resource-group $RESOURCE_GROUP --name $CLUSTER
Kommentar
När du roterar certifikat kan du använda parametern
--rotation-poll-interval
för azure Key Vault Secrets Provider-tillägget för att styra hur snabbt hemligheterna synkroniseras ned till klustret. Till exempel:az aks addon update --resource-group $RESOURCE_GROUP --name $CLUSTER --addon azure-keyvault-secrets-provider --enable-secret-rotation --rotation-poll-interval 20s
Auktorisera den användartilldelade hanterade identiteten för tillägget för att ha åtkomst till Azure Key Vault-resursen:
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
Kommentar
Om du har skapat ditt Key Vault med Azure RBAC-auktorisering för din behörighetsmodell i stället för Åtkomstprincip för valv följer du anvisningarna här för att skapa behörigheter för den hanterade identiteten. Lägg till en Azure-rolltilldelning för
Key Vault Reader
tilläggets användartilldelade hanterade identitet.
Konfigurera Istio-baserat service mesh-tillägg med ca-certifikat för plugin-program
Aktivera tillägget Istio Service Mesh för ditt befintliga AKS-kluster medan du refererar till Azure Key Vault-hemligheterna som skapades tidigare:
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
Kommentar
För befintliga kluster med Istio-tillägg med självsignerat rotcertifikat som genereras av Istio CA stöds inte växling till plugin-certifikatutfärdare. Du måste först inaktivera nätet i dessa kluster och sedan aktivera det igen med hjälp av kommandot ovan för att gå igenom ca-indata för plugin-programmet.
Kontrollera att
cacerts
skapas i klustret:kubectl get secret -n aks-istio-system
Förväntad utdata:
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
Kontrollera att Kontrollplanet Istio hämtade den anpassade certifikatutfärdare:
kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system | grep -v validationController | grep x509
Förväntade utdata bör likna:
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"
Rotation av certifikatutfärdare
Du kan behöva rotera certifikatutfärdarna regelbundet av säkerhetsskäl eller principskäl. Det här avsnittet beskriver hur du hanterar mellanliggande CA- och rotcertifikatutfärdarroteringsscenarier.
Rotation av mellanliggande certifikatutfärdare
Du kan rotera den mellanliggande certifikatutfärdarcertifikatutfärdarna samtidigt som rotcertifikatutfärdarcertifikatutfärdarcertifikatutfärdarna hålls likadana. Uppdatera hemligheterna i Azure Key Vault-resursen med det nya certifikatet och nyckelfilerna:
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>
Vänta tills tidsåtgången för
--rotation-poll-interval
. Kontrollera om hemlighetencacerts
har uppdaterats i klustret baserat på den nya mellanliggande CERTIFIKAT som uppdaterades på Azure Key Vault-resursen:kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system | grep -v validationController
Förväntade utdata bör likna:
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
Arbetsbelastningarna tar emot certifikat från Istio-kontrollplanet som är giltiga i 24 timmar som standard. Om du inte startar om poddarna får alla arbetsbelastningar nya lövcertifikat baserat på den nya mellanliggande certifikatutfärdare på 24 timmar. Om du vill tvinga alla dessa arbetsbelastningar att hämta nya lövcertifikat direkt från den nya mellanliggande certifikatutfärdare måste du starta om arbetsbelastningarna.
kubectl rollout restart deployment <deployment name> -n <deployment namespace>
Rotcertifikatutfärdarrotation
Du måste uppdatera Azure Key Vault-hemligheter med rotcertifikatfilen med sammanlänkningen av de gamla och de nya rotcertifikaten:
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
Innehållet i följer det här formatet:-----BEGIN CERTIFICATE----- <contents of old root certificate> -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- <contents of new root certificate> -----END CERTIFICATE-----
Tillägget innehåller en
CronJob
körning var tionde minut i klustret för att söka efter uppdateringar av rotcertifikatet. Om den identifierar en uppdatering startar den om Istio-kontrollplanet (istiod
distributionen) för att hämta uppdateringarna. Du kan kontrollera loggarna för att bekräfta att rotcertifikatuppdateringen har identifierats och att Istio-kontrollplanet startades om: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}')
Förväntad utdata:
Root certificate update detected. Restarting deployment... deployment.apps/istiod-asm-1-17 restarted Deployment istiod-asm-1-17 restarted.
När
istiod
omstarten har startats om bör det indikera att två certifikat har lagts till i förtroendedomänen:kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system
Förväntad utdata:
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
Du måste antingen vänta i 24 timmar (standardtiden för lövcertifikatets giltighet) eller tvinga fram en omstart av alla arbetsbelastningar. På så sätt känner alla arbetsbelastningar igen både de gamla och de nya certifikatutfärdarna för mTLS-verifiering.
kubectl rollout restart deployment <deployment name> -n <deployment namespace>
Nu kan du uppdatera Azure Key Vault-hemligheter med endast den nya CERTIFIKAT:n (utan den gamla CA:n):
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>
Kontrollera loggarna för
CronJob
för att bekräfta identifieringen av rotcertifikatuppdateringen och omstarten avistiod
: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}')
Förväntad utdata:
Root certificate update detected. Restarting deployment... deployment.apps/istiod-asm-1-17 restarted Deployment istiod-asm-1-17 restarted.
När
istiod
den har uppdaterats bör den endast bekräfta användningen av den nya rotcertifikatutfärdarcertifikatutfärdarna:kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system | grep -v validationController
Förväntad utdata:
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"
I de exempelutdata som visas i den här artikeln kan du se att vi har flyttat från rot A (används när tillägget aktiveras) till rot B.
Du kan antingen vänta i 24 timmar igen eller tvinga fram en omstart av alla arbetsbelastningar. Om du tvingar fram en omstart får arbetsbelastningarna nya lövcertifikat från den nya rotcertifikatutfärdare omedelbart.
kubectl rollout restart deployment <deployment name> -n <deployment namespace>
Azure Kubernetes Service