Problembehandlung beim Istio-Dienstgitter-Add-In-Plug-In-Zertifizierungsstellenzertifikat
In diesem Artikel werden allgemeine Problembehandlungsprobleme mit dem Zertifikatfeature der Istio-Add-In-Zertifizierungsstelle (Ca) erläutert, und es bietet Lösungen zum Beheben dieser Probleme. Der Artikel überprüft außerdem den allgemeinen Prozess der Einrichtung von Plug-In-Zertifizierungsstellenzertifikaten für das Dienstgitter-Add-On.
Notiz
In diesem Artikel wird davon ausgegangen, dass die Istio-Revision asm-1-21
auf dem Cluster bereitgestellt wird.
Voraussetzungen
Das Kubernetes-Kubectl-Tool oder ein ähnliches Tool zum Herstellen einer Verbindung mit dem Cluster. Führen Sie zum Installieren von Kubectl mithilfe der Azure CLI den Befehl "az aks install-cli " aus.
Die folgenden Standardmäßigen Shelltools im Linux-Stil:
grep
sort
tail
awk
xargs
Das jq-Tool zum Abfragen von JSON-Daten.
Allgemeiner Einrichtungsprozess
Bevor Sie das Istio-Add-On für die Verwendung des Plug-In-Zertifizierungsstellenfeatures aktivieren, müssen Sie den Azure Key Vault-Anbieter für das Add-On "Secrets Store" im Cluster aktivieren. Stellen Sie sicher, dass sich der Azure Key Vault und der Cluster auf demselben Azure-Mandanten befinden.
Nachdem das Azure Key Vault-Anbieter-Add-On aktiviert wurde, müssen Sie den Zugriff auf den Azure Key Vault für die vom Add-On vom Benutzer zugewiesene verwaltete Identität einrichten.
Nachdem Sie die Berechtigung für die vom Benutzer zugewiesene verwaltete Identität für den Zugriff auf den Azure Key Vault erteilt haben, können Sie das Feature für Plug-In-Zertifizierungsstellenzertifikate zusammen mit dem Istio-Add-On verwenden. Weitere Informationen finden Sie im Abschnitt "Aktivieren des Istio-Add-Ons für die Verwendung eines Plug-In-Zertifizierungsstellenzertifikats ".
Damit der Cluster Änderungen in den geheimen Azure Key Vault-Schlüsseln automatisch erkennt, müssen Sie die automatische Drehung für das Azure Key Vault-Anbieter-Anbieter-Add-On aktivieren.
Obwohl Änderungen am Zwischenzertifikat automatisch angewendet werden, werden Änderungen am Stammzertifikat nur von der Steuerungsebene übernommen, nachdem die
istiod
Bereitstellung von einem Cronjob neu gestartet wurde, den das Add-On bereitstellt, wie im Abschnitt "Bereitgestellte Ressourcen " erläutert. Dieser Cronjob wird in einem Intervall von 10 Minuten ausgeführt.
Aktivieren des Istio-Add-Ons für die Verwendung eines Plug-In-Zertifizierungsstellenzertifikats
Mit dem Zertifikatfeature des Istio-Add-On-Add-In-Zertifizierungsstellen können Sie Plug-In-Stamm- und Zwischenzertifikate für das Gitter konfigurieren. Um Plug-In-Zertifikatinformationen bereitzustellen, wenn Sie das Add-On aktivieren, geben Sie die folgenden Parameter für den Az aks Mesh Enable-Befehl in Azure CLI an.
Parameter | Beschreibung |
---|---|
--key-vault-id <ressourcen-id> |
Die Azure Key Vault-Ressourcen-ID. Diese Ressource wird erwartet, dass sie sich im gleichen Mandanten wie der verwaltete Cluster befindet. Diese Ressourcen-ID muss im Ressourcen-ID-Format der Azure Resource Manager-Vorlage (ARM-Vorlage) vorliegen. |
--root-cert-object-name <root-cert-obj-name> |
Der Name des Stammzertifikatobjekts im Azure Key Vault. |
--ca-cert-object-name <inter-cert-obj-name> |
Der Name des Zwischenzertifikatobjekts im Azure Key Vault. |
--ca-key-object-name <name inter-key-obj-name> |
Der Name des privaten Schlüsselobjekts des Zwischenzertifikats im Azure Key Vault. |
--cert-chain-object-name <cert-chain-obj-name> |
Der Name des Zertifikatkettenobjekts im Azure Key Vault. |
Wenn Sie das Feature für Plug-In-Zertifizierungsstellenzertifikate verwenden möchten, müssen Sie alle fünf Parameter angeben. Es wird erwartet, dass alle Azure Key Vault-Objekte den Typ "Geheim" aufweisen.
Weitere Informationen finden Sie unter Plug-In-Zertifizierungsstellenzertifikate für Istio-basiertes Dienstgitter-Add-On auf Azure Kubernetes Service.
Bereitgestellte Ressourcen
Im Rahmen der Add-On-Bereitstellung für das Feature für Plug-In-Zertifikate werden die folgenden Ressourcen auf dem Cluster bereitgestellt:
Der
cacerts
geheime Kubernetes-Schlüssel wird zum Zeitpunkt der Add-On-Bereitstellung imaks-istio-system
Namespace erstellt. Dieser geheime Schlüssel enthält synchronisierte Azure Key Vault-Geheimnisse: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
Das
istio-spc-asm-1-21
SecretProviderClass-Objekt wird zum Zeitpunkt der Add-On-Bereitstellung imaks-istio-system
Namespace erstellt. Diese Ressource enthält Azure-spezifische Parameter für den Secrets Store Container Storage Interface (CSI)-Treiber:kubectl get secretproviderclass --namespace aks-istio-system
NAME AGE istio-spc-asm-1-21 14h
Die
istio-ca-root-cert
Configmap wird imaks-istio-system
Namespace und allen vom Benutzer verwalteten Namespaces erstellt. Diese Configmap enthält das Stammzertifikat, das von der Zertifizierungsstelle verwendet wird, und es wird von Arbeitslasten in den Namespaces verwendet, um die Workload-zu-Workload-Kommunikation wie folgt zu überprüfen: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-----
Das
istio-cert-validator-cronjob-asm-1-21
cronjob-Objekt wird imaks-istio-system
Namespace erstellt. Dieser Cronjob wird alle 10 Minuten ausgeführt, um nach Updates für das Stammzertifikat zu suchen. Wenn das Stammzertifikat, das sich imcacerts
Kubernetes-Schlüssel befindet, nicht mit deristio-ca-root-cert
Configmap imaks-istio-system
Namespace übereinstimmt, wird dieistiod-asm-1-21
Bereitstellung neu gestartet:kubectl get cronjob --namespace aks-istio-system
NAME SCHEDULE SUSPEND ACTIVE istio-cert-validator-cronjob-asm-1-21 */10 * * * * False 0
Sie können den folgenden Befehl ausführen, um die Cronjob-Protokolle für die letzte Ausführung zu überprüfen:
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}')
Dieser Befehl generiert eine der folgenden Ausgabemeldungen, je nachdem, ob eine Stammzertifikataktualisierung erkannt wurde:
Root certificate update not detected.
Root certificate update detected. Restarting deployment... deployment.apps/istiod-asm-1-21 restarted Deployment istiod-asm-1-21 restarted.
Ermitteln des Zertifikattyps in Bereitstellungsprotokollen
Sie können die istiod
Bereitstellungsprotokolle anzeigen, um zu bestimmen, ob Sie über ein selbstsigniertes Zertifizierungsstellenzertifikat oder ein Plug-In-Zertifizierungsstellenzertifikat verfügen. Verwenden Sie zum Anzeigen der Protokolle den folgenden Befehl:
kubectl logs deploy/istiod-asm-1-21 --container discovery --namespace aks-istio-system | grep -v validationController
Unmittelbar vor jedem Zertifikatprotokolleintrag befindet sich ein weiterer Protokolleintrag, der diese Art von Zertifikat beschreibt. Für ein selbstsigniertes Zertifizierungsstellenzertifikat gibt der Eintrag "Kein gestecktes Zertifikat unter etc/cacerts/ca-key.pem; Selbstsignierte Zertifikate werden verwendet." Für ein Plug-In-Zertifikat gibt der Eintrag "plugged-in cert at etc/cacerts/ca-key.pem" an. Beispielprotokolleinträge, die sich auf die Zertifikate beziehen, werden in den folgenden Tabellen angezeigt.
Protokollieren von Einträgen für ein selbstsigniertes Zertifizierungsstellenzertifikat
Timestamp Protokolliergrad Nachricht 2023-11-20T23:27:36.649019Z info Verwenden des istiod-Dateiformats für das Signieren von Ca-Dateien 2023-11-20T23:27:36.649032Z info Kein Angeschlossenes Zertifikat unter etc/cacerts/ca-key.pem; Selbstsignierte Zertifikate werden verwendet. 2023-11-20T23:27:36.649536Z info x509-Zertifikat – <Zertifikatdetails> 2023-11-20T23:27:36.649552Z info Istiod-Zertifikate werden neu geladen 2023-11-20T23:27:36.649613Z info spiffe Hinzugefügt 1 Zertifikate, um domänencluster.local in Peer cert verifier zu vertrauen Protokollieren von Einträgen für ein Plug-In-Zertifizierungsstellenzertifikat
Timestamp Protokolliergrad Nachricht 2023-11-21T00:20:25.808396Z info Verwenden des istiod-Dateiformats für das Signieren von Ca-Dateien 2023-11-21T00:20:25.808412Z info plugged-in cert at etc/cacerts/ca-key.pem verwenden 2023-11-21T00:20:25.808731Z info x509-Zertifikat – <Zertifikatdetails> 2023-11-21T00:20:25.808764Z info x509-Zertifikat – <Zertifikatdetails> 2023-11-21T00:20:25.808799Z info x509-Zertifikat – <Zertifikatdetails> 2023-11-21T00:20:25.808803Z info Istiod-Zertifikate werden neu geladen 2023-11-21T00:20:25.808873Z info spiffe Hinzugefügt 1 Zertifikate, um domänencluster.local in Peer cert verifier zu vertrauen
Die Zertifikatdetails in einem Protokolleintrag werden als durch Trennzeichen getrennte Werte für den Aussteller, betreff, fortlaufende Zahl (SN – eine lange hexadezimale Zeichenfolge) und die Anfangs- und Endzeitstempelwerte angezeigt, die definieren, wann das Zertifikat gültig ist.
Für ein selbstsigniertes Zertifizierungsstellenzertifikat gibt es einen Detaileintrag. Beispielwerte für dieses Zertifikat werden in der folgenden Tabelle angezeigt.
Aussteller | Betreff | SN | NotBefore | NotAfter |
---|---|---|---|---|
"O=cluster.local" | "" | <32-stelliger Hexwert> | "2023-11-20T23:25:36Z" | "2033-11-17T23:27:36Z" |
Für ein Plug-In-Zertifizierungsstellenzertifikat gibt es drei Detaileinträge. Die anderen beiden Einträge gelten für eine Stammzertifikataktualisierung und eine Änderung an dem Zwischenzertifikat. Beispielwerte für diese Einträge werden in der folgenden Tabelle angezeigt.
Aussteller | Betreff | SN | NotBefore | NotAfter |
---|---|---|---|---|
CN=Zwischenzertifizierungsstelle - A1,O=Istio,L=cluster-A1" | "" | <32-stelliger Hexwert> | "2023-11-21T00:18:25Z" | "2033-11-18T00:20:25Z" |
CN=Root A,O=Istio" | "CN=Zwischenzertifizierungsstelle - A1,O=Istio,L=cluster-A1" | <40-stelliger Hexwert> | "2023-11-04T01:40:22Z" | "2033-11-01T01:40:22Z" |
CN=Root A,O=Istio" | "CN=Root A,O=Istio" | <40-stelliger Hexwert> | "2023-11-04T01:38:27Z" | "2033-11-01T01:38:27Z" |
Allgemeine Problembehandlung
Problem 1: Der Zugriff auf Azure Key Vault ist falsch eingerichtet.
Nachdem Sie das Azure Key Vault-Anbieter-Add-On aktiviert haben, müssen Sie zugriff auf die vom Benutzer zugewiesene verwaltete Identität des Add-Ons im Azure Key Vault gewähren. Das Einrichten des Zugriffs auf Azure Key Vault führt dazu, dass die Add-On-Installation angehalten wird.
kubectl get pods --namespace aks-istio-system
In der Liste der Pods können Sie sehen, dass die istiod-asm-1-21
Pods in einem Init:0/2
Zustand hängen bleiben.
NAME | BEREIT | STATUS | RESTARTS | AGE |
---|---|---|---|---|
istiod-asm-1-21-6fcfd88478-2x95b | 0/1 | Terminating | 0 | 5m55s |
istiod-asm-1-21-6fcfd88478-6x5hh | 0/1 | Terminating | 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 |
Um das Azure Key Vault-Zugriffsproblem zu überprüfen, führen Sie den kubectl get pods
Befehl aus, um Pods zu finden, die über die secrets-store-provider-azure
Bezeichnung im kube-system
Namespace verfügen:
kubectl get pods --selector app=secrets-store-provider-azure --namespace kube-system --output name | xargs -I {} kubectl logs --namespace kube-system {}
Die folgende Beispielausgabe zeigt, dass ein Fehler "403 Verboten" aufgetreten ist, da Sie keine "Get"-Berechtigungen für geheime Schlüssel im Key Vault besitzen:
"Fehler beim Verarbeiten der Bereitstellungsanforderung" err="failed to get objectType:secret, objectName:<secret-object-name>, objectVersion:: keyvault. BaseClient#GetSecret: Fehler beim Antworten auf Anforderung: StatusCode=403 -- Originalfehler: autorest/azure: Der Dienst hat einen Fehler zurückgegeben. Status=403 Code=\"Verboten\" Message=\"Der Benutzer, die Gruppe oder Anwendung 'appid=<appid>; oid=<oid>; iss=<iss>' verfügt nicht über Geheimschlüssel, die über die Berechtigung "MyAzureKeyVault" verfügen; location=eastus'. Hilfe zum Beheben dieses Problems finden Sie unter https://go.microsoft.com/fwlink/?linkid=2125287\" InnerError={\"code\":\"AccessDenied\"}"
Um dieses Problem zu beheben, richten Sie den Zugriff auf die vom Benutzer zugewiesene verwaltete Identität für das Azure Key Vault-Anbieter-Add-On ein, indem Sie get and list permissions on Azure Key Vault secrets abrufen und das Istio-Add-On erneut installieren. Rufen Sie zunächst die Objekt-ID der vom Benutzer zugewiesenen verwalteten Identität für das Azure Key Vault-Anbieter-Add-On ab, indem Sie den Befehl "az aks show" ausführen:
OBJECT_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER --query 'addonProfiles.azureKeyvaultSecretsProvider.identity.objectId')
Um die Zugriffsrichtlinie festzulegen, führen Sie den folgenden Az keyvault-Satzrichtlinienbefehl aus, indem Sie die von Ihnen abgerufene Objekt-ID angeben:
az keyvault set-policy --name $AKV_NAME --object-id $OBJECT_ID --secret-permissions get list
Notiz
Haben Sie Ihren Key Vault mithilfe der Azure RBAC-Autorisierung für Ihr Berechtigungsmodell anstelle der Tresorzugriffsrichtlinie erstellt? In diesem Fall finden Sie unter Bereitstellen des Zugriffs auf Schlüsseltresorschlüssel, Zertifikate und geheime Schlüssel mit einer rollenbasierten Azure-Zugriffssteuerung , um Berechtigungen für die verwaltete Identität zu erstellen. Fügen Sie eine Azure-Rollenzuweisung für key Vault Reader für die vom Benutzer zugewiesene verwaltete Identität des Add-Ons hinzu.
Problem 2: Die automatische Erkennung geheimer Schlüsseltresoränderungen ist nicht eingerichtet.
Damit ein Cluster Änderungen in den geheimen Azure Key Vault-Schlüsseln automatisch erkennt, müssen Sie die automatische Drehung für das Azure Key Vault-Anbieter-Add-On aktivieren. Die automatische Drehung kann Änderungen in Zwischen- und Stammzertifikaten automatisch erkennen. Führen Sie für einen Cluster, der das Azure Key Vault-Anbieter-Add-On aktiviert, den folgenden az aks show
Befehl aus, um zu überprüfen, ob die automatische Drehung aktiviert ist:
az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER | jq -r '.addonProfiles.azureKeyvaultSecretsProvider.config.enableSecretRotation'
Wenn das Cluster das Azure Key Vault-Anbieter-Add-On aktiviert hat, führen Sie den folgenden az aks show
Befehl aus, um das Drehungsabfragungsintervall zu ermitteln:
az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER | jq -r '.addonProfiles.azureKeyvaultSecretsProvider.config.rotationPollInterval'
Geheime Azure Key Vault-Schlüssel werden mit dem Cluster synchronisiert, wenn die Abfrageintervallzeit nach der vorherigen Synchronisierung verstrichen ist. Der Standardwert für Intervalle beträgt zwei Minuten.
Problem 3: Zertifikatwerte fehlen oder sind falsch konfiguriert
Wenn in Azure Key Vault geheime Objekte fehlen oder diese Objekte falsch konfiguriert sind, bleiben die istiod-asm-1-21
Pods möglicherweise in einem Init:0/2
Status hängen und verzögern die Installation des Add-Ons. Um die zugrunde liegende Ursache dieses Problems zu finden, führen Sie den folgenden kubectl describe
Befehl für die istiod
Bereitstellung aus, und zeigen Sie die Ausgabe an:
kubectl describe deploy/istiod-asm-1-21 --namespace aks-istio-system
Der Befehl zeigt Ereignisse an, die der folgenden Ausgabetabelle ähneln können. In diesem Beispiel ist ein fehlender Geheimschlüssel die Ursache des Problems.
Typ | Ursache | Alter | Im | Nachricht |
---|---|---|---|---|
Normal | Geplant | 3m9s | Default-Scheduler | Erfolgreich zugewiesen aks-istio-system/istiod-asm-1-21-6fcfd88478-hqdjj zu aks-userpool-24672518-vmss000000 |
Warnung | FailedMount | 66s | kubelet | Anfügen oder Bereitstellen von Volumes nicht möglich: Nicht bereitgestellte Volumes=[cacerts], nicht angefügte Volumes=[], fehler beim Verarbeiten von Volumes=[]: Timeout, das auf die Bedingung wartet |
Warnung | FailedMount | 61s (x9 über 3m9s) | kubelet | Fehler beim MountVolume.SetUp für volume "cacerts" : rpc error: code = Unknown desc = failed to mount secrets store objects for pod aks-istio-system/istiod-asm-1-21-6fcfd88478-hqdjj, err: rpc error: code = Unknown desc = failed to mount objects, error: failed to get objectType:secret, objectName:test-cert-chain, objectVersion:: keyvault. BaseClient#GetSecret: Fehler beim Antworten auf Anforderung: StatusCode=404 -- Originalfehler: autorest/azure: Der Dienst hat einen Fehler zurückgegeben. Status=404 Code="SecretNotFound" Message="A secret with (name/id) test-cert-chain was not found in this key vault. Wenn Sie diesen geheimen Schlüssel kürzlich gelöscht haben, können Sie ihn möglicherweise mithilfe des richtigen Wiederherstellungsbefehls wiederherstellen. Hilfe zur Behebung dieses Problems finden Sie unter https://go.microsoft.com/fwlink/?linkid=2125182" |
Ressourcen
Problembehandlung beim Istio-Dienst-Gitter-Add-On MeshConfig
Problembehandlung beim Istio-Dienst-Gitter-Add-On-Eingangsgateway
Problembehandlung beim Problembehandlung beim Istio-Dienstgitter-Gitter-Add-On
Informationen zum Haftungsausschluss von Drittanbietern
Die in diesem Artikel genannten Drittanbieterprodukte stammen von Herstellern, die von Microsoft unabhängig sind. Microsoft gewährt keine implizite oder sonstige Garantie in Bezug auf die Leistung oder Zuverlässigkeit dieser Produkte.
Haftungsausschluss für Kontaktinformationen von Drittanbietern
Microsoft stellt Kontaktinformationen von Drittanbietern bereit, damit Sie weitere Informationen zu diesem Thema einholen können. Diese Kontaktinformationen können ohne vorherige Ankündigung geändert werden. Microsoft übernimmt keine Garantie für die Richtigkeit dieser Kontaktinformationen von Drittanbietern.
Kontaktieren Sie uns für Hilfe
Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.