Delen via


Ca-certificaten invoegtoepassing voor op Istio gebaseerde service-mesh-invoegtoepassing in Azure Kubernetes Service

In de op Istio gebaseerde service-mesh-invoegtoepassing voor Azure Kubernetes Service genereert de Istio-certificeringsinstantie (CA) standaard een zelfondertekend basiscertificaat en -sleutel en gebruikt deze om de workloadcertificaten te ondertekenen. Als u de basis-CA-sleutel wilt beveiligen, moet u een basis-CA gebruiken, die offline wordt uitgevoerd op een beveiligde computer. U kunt de basis-CA gebruiken om tussenliggende certificaten uit te geven aan de Istio CA's die in elk cluster worden uitgevoerd. Een Istio-CA kan workloadcertificaten ondertekenen met behulp van het door de beheerder opgegeven certificaat en sleutel en een door de beheerder opgegeven basiscertificaat distribueren naar de werkbelastingen als de basis van vertrouwen. In dit artikel wordt beschreven hoe u uw eigen certificaten en sleutels voor Istio-CA kunt gebruiken in de service mesh-invoegtoepassing op basis van Istio voor Azure Kubernetes Service.

Diagram met hoofd- en tussenliggende CA met Istio.

In dit artikel wordt beschreven hoe u de Istio-certificeringsinstantie kunt configureren met een basiscertificaat, handtekeningcertificaat en sleutel die als invoer worden geleverd met behulp van Azure Key Vault voor de op Istio gebaseerde service mesh-invoegtoepassing.

Voordat u begint

Azure CLI-versie controleren

Voor de invoegtoepassing is Azure CLI versie 2.57.0 of hoger geïnstalleerd. U kunt de versie uitvoeren az --version om de versie te controleren. Zie [Azure CLI installeren][azure-cli-install] als u deze wilt installeren of upgraden.

Azure Key Vault instellen

  1. U hebt een Azure Key Vault-resource nodig om het certificaat en de sleutelinvoer op te geven aan de Istio-invoegtoepassing.

  2. U moet een basiscertificaat, tussenliggende certificaten, tussenliggende sleutel en de certificaatketen offline genereren. Stap 1-3 van hieruit bevat een voorbeeld van het genereren van deze bestanden.

  3. Geheimen maken in Azure Key Vault met behulp van de certificaten en sleutel:

    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. Schakel de Azure Key Vault-provider in voor het CSI-stuurprogramma voor het geheimarchief voor uw cluster:

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

    Notitie

    Wanneer u certificaten roteert, kunt u bepalen hoe snel de geheimen worden gesynchroniseerd met het cluster, kunt u de parameter van de --rotation-poll-interval Azure Key Vault Secrets Provider-invoegtoepassing gebruiken. Bijvoorbeeld: az aks addon update --resource-group $RESOURCE_GROUP --name $CLUSTER --addon azure-keyvault-secrets-provider --enable-secret-rotation --rotation-poll-interval 20s

  5. Autoriseren van de door de gebruiker toegewezen beheerde identiteit van de invoegtoepassing om toegang te hebben tot de Azure Key Vault-resource:

    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
    

    Notitie

    Als u uw Key Vault hebt gemaakt met Azure RBAC-autorisatie voor uw machtigingsmodel in plaats van Kluistoegangsbeleid, volgt u de instructies hier om machtigingen voor de beheerde identiteit te maken. Voeg een Azure-roltoewijzing toe voor Key Vault Reader de door de gebruiker toegewezen beheerde identiteit van de invoegtoepassing.

Service mesh-invoegtoepassing op basis van Istio instellen met invoegtoepassings-CA-certificaten

  1. Schakel de Mesh-invoegtoepassing van de Istio-service in voor uw bestaande AKS-cluster terwijl u verwijst naar de Azure Key Vault-geheimen die u eerder hebt gemaakt:

    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
    

    Notitie

    Voor bestaande clusters met istio-invoegtoepassing met behulp van zelfondertekend basiscertificaat dat is gegenereerd door Istio CA, wordt het overschakelen naar ca van de invoegtoepassing niet ondersteund. U moet eerst de mesh op deze clusters uitschakelen en deze vervolgens opnieuw inschakelen met behulp van de bovenstaande opdracht om de CA-invoer van de invoegtoepassing door te geven.

  2. Controleer of het cacerts wordt gemaakt op het cluster:

    kubectl get secret -n aks-istio-system
    

    Verwachte uitvoer:

    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. Controleer of het istio-besturingsvlak de aangepaste certificeringsinstantie heeft opgehaald:

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

    De verwachte uitvoer moet er ongeveer als volgt uitzien:

    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"
    

Rotatie van certificeringsinstantie

Mogelijk moet u de certificeringsinstanties regelmatig roteren om veiligheids- of beleidsredenen. In deze sectie wordt uitgelegd hoe u tussenliggende CA- en basis-CA-rotatiescenario's kunt afhandelen.

Tussenliggende rotatie van certificeringsinstantie

  1. U kunt de tussenliggende CA roteren terwijl u de basis-CA hetzelfde houdt. Werk de geheimen in de Azure Key Vault-resource bij met het nieuwe certificaat en de sleutelbestanden:

    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. Wacht op de tijdsduur van --rotation-poll-interval. Controleer of het cacerts geheim is vernieuwd op het cluster op basis van de nieuwe tussenliggende CA die is bijgewerkt op de Azure Key Vault-resource:

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

    De verwachte uitvoer moet er ongeveer als volgt uitzien:

    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. De workloads ontvangen standaard certificaten van het Istio-besturingsvlak die standaard 24 uur geldig zijn. Als u de pods niet opnieuw opstart, krijgen alle workloads binnen 24 uur nieuwe leaf-certificaten op basis van de nieuwe tussenliggende CA. Als u wilt afdwingen dat al deze werkbelastingen direct nieuwe leaf-certificaten verkrijgen van de nieuwe tussenliggende CA, moet u de werkbelastingen opnieuw starten.

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

Rotatie van basiscertificeringsinstantie

  1. U moet Azure Key Vault-geheimen bijwerken met het basiscertificaatbestand met de samenvoeging van het oude en de nieuwe basiscertificaten:

    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>
    

    De inhoud van root-cert.pem deze indeling volgt:

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

    De invoegtoepassing bevat elke tien minuten een CronJob uitvoering op het cluster om te controleren op updates voor het basiscertificaat. Als er een update wordt gedetecteerd, wordt het Istio-besturingsvlak (istiod implementatie) opnieuw opgestart om de updates op te halen. U kunt de logboeken controleren om te controleren of de update van het basiscertificaat is gedetecteerd en of het Istio-besturingsvlak opnieuw is opgestart:

    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}')
    

    Verwachte uitvoer:

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

    Nadat istiod het opnieuw is opgestart, moet worden aangegeven dat er twee certificaten zijn toegevoegd aan het vertrouwensdomein:

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

    Verwachte uitvoer:

    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. U moet 24 uur wachten (de standaardtijd voor de geldigheid van het leaf-certificaat) of het opnieuw opstarten van alle workloads afdwingen. Op deze manier herkennen alle workloads zowel de oude als de nieuwe certificeringsinstanties voor mTLS-verificatie.

    kubectl rollout restart deployment <deployment name> -n <deployment namespace>
    
  3. U kunt nu Azure Key Vault-geheimen bijwerken met alleen de nieuwe CA (zonder de oude CA):

    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>
    

    Controleer de logboeken van de CronJob logboeken om de detectie van de update van het basiscertificaat te bevestigen en het opnieuw opstarten van 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}')
    

    Verwachte uitvoer:

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

    Nadat istiod deze is bijgewerkt, moet alleen het gebruik van de nieuwe basis-CA worden bevestigd:

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

    Verwachte uitvoer:

    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"
    

    In de voorbeelduitvoer die in dit artikel wordt weergegeven, kunt u zien dat we zijn verplaatst van hoofdmap A (gebruikt bij het inschakelen van de invoegtoepassing) naar Root B.

  4. U kunt 24 uur opnieuw wachten of opnieuw opstarten van alle workloads afdwingen. Door opnieuw opstarten af te dwingen, krijgen de workloads onmiddellijk nieuwe leaf-certificaten van de nieuwe basis-CA.

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