Problemen met invoegtoepassings-CA-certificaten voor Istio-service mesh oplossen
In dit artikel worden veelvoorkomende problemen besproken met de functie certificaten van de invoegtoepassing Istio-invoegtoepassing voor certificeringsinstanties en biedt het oplossingen voor het oplossen van deze problemen. In het artikel wordt ook het algemene proces voor het instellen van invoegtoepassings-CA-certificaten voor de service mesh-invoegtoepassing besproken.
Notitie
In dit artikel wordt ervan uitgegaan dat de Revisie van Istio asm-1-21
is geïmplementeerd op het cluster.
Voorwaarden
Het Kubernetes kubectl-hulpprogramma , of een vergelijkbaar hulpprogramma, om verbinding te maken met het cluster. Als u kubectl wilt installeren met behulp van Azure CLI, voert u de opdracht az aks install-cli uit.
De volgende standaard shell-hulpprogramma's in Linux-stijl:
grep
sort
tail
awk
xargs
Het jq-hulpprogramma voor het uitvoeren van query's op JSON-gegevens.
Algemeen installatieproces
Voordat u de Istio-invoegtoepassing inschakelt om de functie ca-certificaten voor invoegtoepassingen te gebruiken, moet u de Azure Key Vault-provider inschakelen voor de invoegtoepassing Secrets Store op het cluster. Zorg ervoor dat de Azure Key Vault en het cluster zich in dezelfde Azure-tenant bevinden.
Nadat de invoegtoepassing geheimenprovider van Azure Key Vault is ingeschakeld, moet u toegang instellen tot De Azure Key Vault voor de door de gebruiker toegewezen beheerde identiteit die door de invoegtoepassing wordt gemaakt.
Nadat u toestemming hebt verleend voor de door de gebruiker toegewezen beheerde identiteit voor toegang tot Azure Key Vault, kunt u de functie voor ca-certificaten van de invoegtoepassing samen met de Istio-invoegtoepassing gebruiken. Zie de invoegtoepassing Istio inschakelen voor het gebruik van een invoegtoepassing voor CA-certificaten voor meer informatie.
Als u wilt dat het cluster wijzigingen in de Azure Key Vault-geheimen automatisch detecteert, moet u automatische rotatie inschakelen voor de Azure Key Vault-invoegtoepassing voor geheimenproviders.
Hoewel wijzigingen in het tussenliggende certificaat automatisch worden toegepast, worden wijzigingen in het basiscertificaat alleen opgehaald door het besturingsvlak nadat de
istiod
implementatie opnieuw is gestart door een cronjob die door de invoegtoepassing wordt geïmplementeerd, zoals wordt uitgelegd in de sectie Geïmplementeerde resources . Deze cronjob wordt uitgevoerd met een interval van 10 minuten.
Schakel de Istio-invoegtoepassing in om een invoegtoepassings-CA-certificaat te gebruiken
Met de functie Voor ca-certificaten van de invoegtoepassing Istio kunt u invoegtoepassingshoofd- en tussenliggende certificaten voor de mesh configureren. Als u invoegtoepassingscertificaatgegevens wilt opgeven wanneer u de invoegtoepassing inschakelt, geeft u de volgende parameters op voor de opdracht az aks mesh enable in Azure CLI.
Parameter | Description |
---|---|
--key-vault-id <resource-id> |
De resource-id van Azure Key Vault. Deze resource bevindt zich naar verwachting in dezelfde tenant als het beheerde cluster. Deze resource-id moet de resource-id-indeling van de Azure Resource Manager-sjabloon (ARM-sjabloon) hebben. |
--root-cert-object-name <root-cert-obj-name> |
De naam van het basiscertificaatobject in Azure Key Vault. |
--ca-cert-object-name <inter-cert-obj-name> |
De naam van het tussenliggende certificaatobject in Azure Key Vault. |
--ca-key-object-name <inter-key-obj-name> |
De naam van het tussenliggende certificaatobject voor persoonlijke sleutel in Azure Key Vault. |
--cert-chain-object-name <cert-chain-obj-name> |
De naam van het certificaatketenobject in Azure Key Vault. |
Als u de functie voor ca-certificaten voor invoegtoepassingen wilt gebruiken, moet u alle vijf de parameters opgeven. Naar verwachting zijn alle Azure Key Vault-objecten van het type Geheim.
Zie Invoegtoepassings-CA-certificaten voor op Istio gebaseerde service mesh-invoegtoepassing op Azure Kubernetes Service voor meer informatie.
Geïmplementeerde resources
Als onderdeel van de implementatie van de invoegtoepassing voor de functie voor invoegtoepassingscertificaten worden de volgende resources geïmplementeerd op het cluster:
Het
cacerts
Kubernetes-geheim wordt gemaakt in deaks-istio-system
naamruimte op het moment van de implementatie van de invoegtoepassing. Dit geheim bevat gesynchroniseerde Azure Key Vault-geheimen:kubectl describe secret cacerts --namespace aks-istio-system
Name: cacerts Namespace: aks-istio-system Labels: secrets-store.csi.k8s.io/managed=true Annotations: <none> Type: opaque Data ==== ca-cert.pem: 1968 bytes ca-key.pem: 3272 bytes cert-chain.pem: 3786 bytes root-cert.pem: 3636 bytes
Het
istio-spc-asm-1-21
SecretProviderClass-object wordt gemaakt in deaks-istio-system
naamruimte op het moment van de implementatie van de invoegtoepassing. Deze resource bevat Azure-specifieke parameters voor het stuurprogramma Secrets Store Container Storage Interface (CSI):kubectl get secretproviderclass --namespace aks-istio-system
NAME AGE istio-spc-asm-1-21 14h
De
istio-ca-root-cert
configuratiemap wordt gemaakt in deaks-istio-system
naamruimte en alle door de gebruiker beheerde naamruimten. Deze configuratiekaart bevat het basiscertificaat dat door de certificeringsinstantie wordt gebruikt en wordt als volgt gebruikt door workloads in de naamruimten om communicatie tussen werkbelastingen te valideren:kubectl describe configmap istio-ca-root-cert --namespace aks-istio-system
Name: istio-ca-root-cert Namespace: aks-istio-system Labels: istio.io/config=true Annotations: <none> Data ==== root-cert.pem: ---- -----BEGIN CERTIFICATE----- <certificate data> -----END CERTIFICATE-----
Het
istio-cert-validator-cronjob-asm-1-21
cronjob-object wordt gemaakt in deaks-istio-system
naamruimte. Deze cronjob wordt elke 10 minuten uitgevoerd om te controleren op updates op het basiscertificaat. Als het basiscertificaat dat zich in hetcacerts
Kubernetes-geheim bevindt, niet overeenkomt met deistio-ca-root-cert
configuratiemap in deaks-istio-system
naamruimte, wordt deistiod-asm-1-21
implementatie opnieuw gestart:kubectl get cronjob --namespace aks-istio-system
NAME SCHEDULE SUSPEND ACTIVE istio-cert-validator-cronjob-asm-1-21 */10 * * * * False 0
U kunt de volgende opdracht uitvoeren om de cronjob-logboeken voor de laatste uitvoering te controleren:
kubectl logs --namespace aks-istio-system $(kubectl get pods --namespace aks-istio-system | grep 'istio-cert-validator-cronjob-' | sort -k8 | tail -n 1 | awk '{print $1}')
Met deze opdracht wordt een van de volgende uitvoerberichten gegenereerd, afhankelijk van of er een update van het basiscertificaat is gedetecteerd:
Root certificate update not detected.
Root certificate update detected. Restarting deployment... deployment.apps/istiod-asm-1-21 restarted Deployment istiod-asm-1-21 restarted.
Certificaattype bepalen in implementatielogboeken
U kunt de istiod
implementatielogboeken bekijken om te bepalen of u een zelfondertekend CA-certificaat of een invoegtoepassings-CA-certificaat hebt. Voer de volgende opdracht uit om logboeken uit te voeren:
kubectl logs deploy/istiod-asm-1-21 --container discovery --namespace aks-istio-system | grep -v validationController
Direct voordat elke certificaatlogboekvermelding een andere logboekvermelding is die dat type certificaat beschrijft. Voor een zelfondertekend CA-certificaat vermeldt de vermelding "Geen plugged-in certificaat op etc/cacerts/ca-key.pem; zelfondertekend certificaat wordt gebruikt. Voor een invoegtoepassingscertificaat geeft de vermelding de status 'Plugged-in-certificaat gebruiken op etc/cacerts/ca-key.pem'. Voorbeeldlogboekvermeldingen die betrekking hebben op de certificaten, worden weergegeven in de volgende tabellen.
Logboekvermeldingen voor een zelfondertekend CA-certificaat
Tijdstempel Registratieniveau Bericht 2023-11-20T23:27:36.649019Z Info Istiod-bestandsindeling gebruiken voor het ondertekenen van CA-bestanden 2023-11-20T23:27:36.649032Z Info Geen plugged-in certificaat bij etc/cacerts/ca-key.pem; zelfondertekend certificaat wordt gebruikt 2023-11-20T23:27:36.649536Z Info x509-certificaat - <certificaatdetails> 2023-11-20T23:27:36.649552Z Info Istiod-certificaten worden opnieuw geladen 2023-11-20T23:27:36.649613Z Info spiffe heeft 1 certificaten toegevoegd om domeincluster.local te vertrouwen in peer-certificaatverifier Logboekvermeldingen voor een invoegtoepassings-CA-certificaat
Tijdstempel Registratieniveau Bericht 2023-11-21T00:20:25.808396Z Info Istiod-bestandsindeling gebruiken voor het ondertekenen van CA-bestanden 2023-11-21T00:20:25.808412Z Info Plugged-in certificaat gebruiken op etc/cacerts/ca-key.pem 2023-11-21T00:20:25.808731Z Info x509-certificaat - <certificaatdetails> 2023-11-21T00:20:25.808764Z Info x509-certificaat - <certificaatdetails> 2023-11-21T00:20:25.808799Z Info x509-certificaat - <certificaatdetails> 2023-11-21T00:20:25.808803Z Info Istiod-certificaten worden opnieuw geladen 2023-11-21T00:20:25.808873Z Info spiffe heeft 1 certificaten toegevoegd om domeincluster.local te vertrouwen in peer-certificaatverifier
De certificaatdetails in een logboekvermelding worden weergegeven als door komma's gescheiden waarden voor de verlener, het onderwerp, het serienummer (SN, een lange hexadecimale tekenreeks) en de waarden voor de begin- en eindtijdstempel die bepalen wanneer het certificaat geldig is.
Voor een zelfondertekend CA-certificaat is er één detailvermelding. Voorbeeldwaarden voor dit certificaat worden weergegeven in de volgende tabel.
Verlener | Onderwerp | SN | NotBefore | NotAfter |
---|---|---|---|---|
"O=cluster.local" | "" | <32-cijferige-hex-waarde> | "2023-11-20T23:25:36Z" | "2033-11-17T23:27:36Z" |
Voor een invoegtoepassings-CA-certificaat zijn er drie detailvermeldingen. De andere twee vermeldingen zijn voor een update van een basiscertificaat en een wijziging in het tussenliggende certificaat. Voorbeeldwaarden voor deze vermeldingen worden weergegeven in de volgende tabel.
Verlener | Onderwerp | SN | NotBefore | NotAfter |
---|---|---|---|---|
CN=Tussenliggende CA - A1,O=Istio,L=cluster-A1" | "" | <32-cijferige-hex-waarde> | "2023-11-21T00:18:25Z" | "2033-11-18T00:20:25Z" |
CN=Root A,O=Istio" | "CN=Tussenliggende CA - A1,O=Istio,L=cluster-A1" | <40-digit-hex-value> | "2023-11-04T01:40:22Z" | "2033-11-01T01:40:22Z" |
CN=Root A,O=Istio" | "CN=Root A,O=Istio" | <40-digit-hex-value> | "2023-11-04T01:38:27Z" | "2033-11-01T01:38:27Z" |
Algemene problemen
Probleem 1: Toegang tot Azure Key Vault is onjuist ingesteld
Nadat u de azure Key Vault-invoegtoepassing voor geheimenprovider hebt ingeschakeld, moet u toegang verlenen tot de door de gebruiker toegewezen beheerde identiteit van de invoegtoepassing aan De Azure Key Vault. Als u toegang tot Azure Key Vault instelt, is de installatie van de invoegtoepassing onjuist vastgelopen.
kubectl get pods --namespace aks-istio-system
In de lijst met pods ziet u dat de istiod-asm-1-21
pods vastzitten in een Init:0/2
status.
NAAM | GEREED | STATUS | HERSTARTEN | LEEFTIJD |
---|---|---|---|---|
istiod-asm-1-21-6fcfd88478-2x95b | 0/1 | Beëindiging | 0 | 5m55s |
istiod-asm-1-21-6fcfd88478-6x5hh | 0/1 | Beëindiging | 0 | 5m40s |
istiod-asm-1-21-6fcfd88478-c48f9 | 0/1 | Init:0/2 | 0 | 54s |
istiod-asm-1-21-6fcfd88478-wl8mw | 0/1 | Init:0/2 | 0 | 39s |
Als u het toegangsprobleem met Azure Key Vault wilt controleren, voert u de kubectl get pods
opdracht uit om pods met het secrets-store-provider-azure
label in de kube-system
naamruimte te zoeken:
kubectl get pods --selector app=secrets-store-provider-azure --namespace kube-system --output name | xargs -I {} kubectl logs --namespace kube-system {}
In de volgende voorbeelduitvoer ziet u dat er een fout '403 Verboden' is opgetreden omdat u geen 'get'-machtigingen hebt voor geheimen in de Key Vault:
"kan aanvraag voor koppelen niet verwerken" err="kan objectType:secret, objectName:<secret-object-name>, objectVersion:: keyvault ophalen. BaseClient#GetSecret: Fout bij reageren op aanvraag: StatusCode=403 -- Oorspronkelijke fout: autorest/azure: Service heeft een fout geretourneerd. Status=403 Code=\"Forbidden\" Message=\"The user, group or application 'appid=<appid>; oid=<oid>; iss=<iss>' heeft geen geheimen om toestemming te krijgen voor key vault 'MyAzureKeyVault; location=eastus'. Zie \" InnerError={\"code\":\"AccessDenied\"}" voor hulp bij het oplossen van dit probleem https://go.microsoft.com/fwlink/?linkid=2125287.
U kunt dit probleem oplossen door toegang tot de door de gebruiker toegewezen beheerde identiteit in te stellen voor de azure Key Vault-invoegtoepassing voor geheimenproviders door machtigingen ophalen en vermelden te verkrijgen voor Azure Key Vault-geheimen en de Istio-invoegtoepassing opnieuw te installeren. Haal eerst de object-id op van de door de gebruiker toegewezen beheerde identiteit voor de Azure Key Vault geheimenprovider-invoegtoepassing door de opdracht az aks show uit te voeren:
OBJECT_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER --query 'addonProfiles.azureKeyvaultSecretsProvider.identity.objectId')
Als u het toegangsbeleid wilt instellen, voert u de volgende opdracht az keyvault set-policy uit door de object-id op te geven die u hebt verkregen:
az keyvault set-policy --name $AKV_NAME --object-id $OBJECT_ID --secret-permissions get list
Notitie
Hebt u uw Key Vault gemaakt met behulp van Azure RBAC-autorisatie voor uw machtigingsmodel in plaats van Vault-toegangsbeleid? In dit geval raadpleegt u Toegang verlenen tot Key Vault-sleutels, -certificaten en -geheimen met een op rollen gebaseerd toegangsbeheer van Azure om machtigingen voor de beheerde identiteit te maken. Voeg een Azure-roltoewijzing toe voor Key Vault Reader voor de door de gebruiker toegewezen beheerde identiteit van de invoegtoepassing.
Probleem 2: Automatische detectie van sleutelkluisgeheimwijzigingen is niet ingesteld
Als u wilt dat een cluster wijzigingen in de Azure Key Vault-geheimen automatisch detecteert, moet u automatische rotatie inschakelen voor de Azure Key Vault-providerinvoegtoepassing. Automatisch rouleren kan wijzigingen in tussenliggende en basiscertificaten automatisch detecteren. Voer voor een cluster dat de Azure Key Vault-providerinvoegtoepassing inschakelt de volgende az aks show
opdracht uit om te controleren of automatische rotatie is ingeschakeld:
az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER | jq -r '.addonProfiles.azureKeyvaultSecretsProvider.config.enableSecretRotation'
Als het cluster de Azure Key Vault-providerinvoegtoepassing heeft ingeschakeld, voert u de volgende az aks show
opdracht uit om het poll-interval voor rotatie te bepalen:
az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER | jq -r '.addonProfiles.azureKeyvaultSecretsProvider.config.rotationPollInterval'
Azure Key Vault-geheimen worden gesynchroniseerd met het cluster wanneer de poll-intervaltijd na de vorige synchronisatie is verstreken. De standaardintervalwaarde is twee minuten.
Probleem 3: certificaatwaarden ontbreken of zijn onjuist geconfigureerd
Als geheime objecten ontbreken in Azure Key Vault of als deze objecten onjuist zijn geconfigureerd, kunnen de istiod-asm-1-21
pods vastlopen in een Init:0/2
status, waardoor de installatie van de invoegtoepassing wordt vertraagd. Als u de onderliggende oorzaak van dit probleem wilt vinden, voert u de volgende kubectl describe
opdracht uit voor de istiod
implementatie en bekijkt u de uitvoer:
kubectl describe deploy/istiod-asm-1-21 --namespace aks-istio-system
Met de opdracht worden gebeurtenissen weergegeven die mogelijk lijken op de volgende uitvoertabel. In dit voorbeeld is een ontbrekend geheim de oorzaak van het probleem.
Type | Reden | Leeftijd | Van | Bericht |
---|---|---|---|---|
Normaal | Gepland | 3m9s | default-scheduler | Aks-istio-system/istiod-asm-1-21-6fcfd88478-hqdjj toegewezen aan aks-userpool-24672518-vmss000000 |
Waarschuwing | FailedMount | 66s | kubelet | Kan volumes niet koppelen of koppelen: niet-gekoppelde volumes=[cacerts], niet-gekoppelde volumes=[], kan volumes niet verwerken=[]: er is een time-out opgetreden bij het wachten op de voorwaarde |
Waarschuwing | FailedMount | 61s (x9 boven 3m9s) | kubelet | MountVolume.SetUp is mislukt voor volume "cacerts" : rpc-fout: code = Unknown desc = failed to mount secrets store objects for pod aks-istio-system/istiod-asm-1-21-6fcfd88478-hqdjj, fout: rpc-fout: code = Onbekend desc = kan objecten niet koppelen, fout: kan objectType:secret, objectName:test-cert-chain, objectVersion:: keyvault niet ophalen. BaseClient#GetSecret: Fout bij reageren op aanvraag: StatusCode=404 -- Oorspronkelijke fout: autorest/azure: Service heeft een fout geretourneerd. Status=404 Code="SecretNotFound" Message="A secret with (name/id) test-cert-chain is niet gevonden in deze sleutelkluis. Als u dit geheim onlangs hebt verwijderd, kunt u het mogelijk herstellen met behulp van de juiste herstelopdracht. Zie voor hulp bij het oplossen van dit probleem https://go.microsoft.com/fwlink/?linkid=2125182" |
Resources
Probleemoplossing voor algemene invoegtoepassingen voor Istio-service mesh
Problemen met de invoegtoepassing Istio-service mesh-invoegtoepassing MeshConfig oplossen
Problemen met de invoegtoepassing Voor inkomend verkeer van istio-service
Probleemoplossing voor kleine revisieupgrades voor istio-service-mesh-invoegtoepassing
Disclaimerinformatie van derden
De producten van derden die in dit artikel worden vermeld, worden vervaardigd door bedrijven die onafhankelijk zijn van Microsoft. Microsoft verleent dan ook geen enkele garantie, impliciet noch anderszins, omtrent de prestaties of de betrouwbaarheid van deze producten.
Disclaimerinformatie van derden
Microsoft biedt contactgegevens van derden om u te helpen aanvullende informatie over dit onderwerp te vinden. Deze contactinformatie kan zonder voorafgaande kennisgeving worden gewijzigd. Microsoft garandeert niet de nauwkeurigheid van contactgegevens van derden.
Contacteer ons voor hulp
Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Azure-feedbackcommunity.