Share via


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.

Diagram som visar rot- och mellanliggande CA med Istio.

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

  1. Du behöver en Azure Key Vault-resurs för att ange certifikatet och nyckelindata till Istio-tillägget.

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

  3. 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/cert-chain.pem>
    
  4. 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

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

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

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

  1. 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>
    
  2. Vänta tills tidsåtgången för --rotation-poll-interval. Kontrollera om hemligheten cacerts 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
    
  3. 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

  1. 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
    
  2. 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>
    
  3. 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 av istiod:

    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.

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