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
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 Secrets User
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-----
Controleer
istiod
de logboeken zodra de certificaten zijn gesynchroniseerd met het cluster.kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system
Verwachte uitvoer:
2023-11-07T06:42:00.287916Z info Updating new ROOT-CA 2023-11-07T06:42:00.287928Z info update root cert and generate new dns certs 2023-11-07T06:42:00.288254Z info Update trust anchor with new root cert 2023-11-07T06:42:00.288279Z info trustBundle updating Source IstioCA with certs 2023-11-07T06:42:00.288298Z info Istiod has detected the newly added intermediate CA and updated its key and certs accordingly 2023-11-07T06:42:00.288303Z info Istiod certificates are reloaded
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
istiod
de logboeken zodra de certificaten zijn gesynchroniseerd met het cluster.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