Freigeben über


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

  • Azure-Befehlszeilenschnittstelle.

  • 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

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 im aks-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 im aks-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 im aks-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 im aks-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 im cacerts Kubernetes-Schlüssel befindet, nicht mit der istio-ca-root-cert Configmap im aks-istio-system Namespace übereinstimmt, wird die istiod-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

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.