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.
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
U hebt een Azure Key Vault-resource nodig om het certificaat en de sleutelinvoer op te geven aan de Istio-invoegtoepassing.
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.
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>
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
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
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.
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
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
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>
Wacht op de tijdsduur van
--rotation-poll-interval
. Controleer of hetcacerts
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
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
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
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>
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 vanistiod
: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.
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>
Azure Kubernetes Service