Nicht übereinstimmendes Ingress-Zertifikat

Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Für dieses Thema gibt es keine entsprechende Apigee Edge-Dokumentation.

Symptom

Ein ApigeeIssue mit Reason AIS_INGRESS_CERT_MISMATCH wird angezeigt, wenn Ressourcen im Namespace apigee angezeigt werden.

Fehlermeldungen

Nachdem kubectl -n apigee get apigeeissues ausgeführt wurde, wird der folgende Fehler angezeigt:

NAME                                          SEVERITY   REASON                      DOCUMENTATION                                                                           AGE
ingress-cert-mismatch-my-org-my-virtualhost   ERROR      AIS_INGRESS_CERT_MISMATCH   https://cloud.google.com/apigee/docs/hybrid/troubleshooting/AIS_INGRESS_CERT_MISMATCH   5h18m

Ursache: Nicht übereinstimmendes Ingress-Zertifikat

Der private Schlüssel und das Zertifikat, die im Kubernetes-Secret gespeichert sind, auf das ApigeeRouteConfig verweist, stimmen nicht überein.

Diagnose

Führen Sie dazu diesen Befehl aus:

kubectl -n apigee describe apigeeissue ISSUE_NAME

Dabei ist ISSUE_NAME der Name des Problems. Beispiel: ingress-cert-mismatch-my-org-my-virtualhost

Es wird in etwa Folgendes zurückgegeben:

Name:         ingress-cert-mismatch-my-org-my-virtualhost
Namespace:    apigee
Labels:       ais-reason=AIS_INGRESS_CERT_MISMATCH
Annotations:  <none>
API Version:  apigee.cloud.google.com/v1alpha1
Kind:         ApigeeIssue
Metadata:
  Creation Timestamp:  2023-06-12T17:03:43Z
  Generation:          1
  Owner References:
    API Version:     apigee.cloud.google.com/v1alpha2
    Kind:            ApigeeOrganization
    Name:            my-org
    UID:             7e83a52c-ce00-4bed-98be-55835ada1817
  Resource Version:  3281563
  UID:               adc775c2-376d-4bf9-9860-500b2b2b8273
Spec:
  Details:        Ingress cert and private key in secret "my-org-my-virtualhost" for ApigeeRouteConfig "my-org-my-virtualhost" do not match
  Documentation:  https://cloud.google.com/apigee/docs/hybrid/troubleshooting/AIS_INGRESS_CERT_MISMATCH
  Reason:         AIS_INGRESS_CERT_MISMATCH
  Severity:       ERROR
Events:           <none>
Spec:
  Details:        Ingress cert and private key in secret "my-org-my-virtualhost" for ApigeeRouteConfig "my-org-my-virtualhost" do not match

Der Inhalt von Spec.Details erläutert den Namen des ApigeeRouteConfig, der auf das Kubernetes-Secret mit dem Ingress-Zertifikat und dem privaten Schlüssel verweist.

Lösung

  1. Verwenden Sie kubectl describe, um den Namen des ApigeeRouteConfig anzuzeigen, der das nicht übereinstimmende Ingress-Zertifikat und den nicht übereinstimmenden Schlüssel hat:

    kubectl -n apigee describe apigeeissue ISSUE_NAME

    Dabei ist ISSUE_NAME der Name des Problems. Beispiel: ingress-cert-mismatch-my-org-my-virtualhost.

    In diesem Beispiel verweist ApigeeRouteConfig my-org-my-virtualhost auf das Secret my-org-my-virtualhost.

  2. Ermitteln Sie den virtualhost-Namen aus dem ApigeeRouteConfig.

    Der Name des ApigeeRouteConfig hat das Format: <Apigee organization>-<virtualhost name>.

    In diesem Beispiel ist my-org die Apigee-Organisation und der Name des virtuellen Hosts my-virtualhost.

  3. Suchen Sie in der Datei overrides.yaml nach dem entsprechenden virtuellen Host:

    virtualhosts:
    ...
    - name: my-virtualhost
      selector:
        app: apigee-ingressgateway
      sslCertPath: ./certs/vhost.pem
      sslKeyPath: ./certs/vhost.key
    ...
  4. Prüfen Sie, ob die verwendeten Zertifikats- und Schlüsseldateien übereinstimmen.

    Prüfen Sie mit openssl, ob die MD5-Summen mit sslCertPath und sslKeyPath aus dem vorherigen Schritt übereinstimmen:

    openssl x509 -noout -modulus -in SSL_CERT_PATH | openssl md5
    openssl rsa -noout -modulus -in SSL_KEY_PATH | openssl md5

    • Dabei ist SSL_CERT_PATH die sslCertPath aus dem vorherigen Schritt. Beispiel: ./certs/vhost.pem.
    • Dabei ist SSL_KEY_PATH die sslKeyPath aus dem vorherigen Schritt. Beispiel: ./certs/vhost.key.

    Die Ausgabe der beiden Befehle sollte übereinstimmen:

    openssl x509 -noout -modulus -in ./certs/vhost.pem | openssl md5
    MD5(stdin)= 40ba189dbe9d6fbfbdde1a8ef803d2d4
    openssl rsa -noout -modulus -in ./certs/vhost.key | openssl md5
    MD5(stdin)= 40ba189dbe9d6fbfbdde1a8ef803d2d4
  5. Wenn die Ausgabe der vorherigen Befehle nicht übereinstimmt, verwenden Sie eine der folgenden Methoden, um das Problem zu beheben:

    • Aktualisieren Sie sslCertPath und sslKeyPath des Virtualhosts so, dass sie auf die richtigen Dateipfade verweisen.
    • Korrigieren Sie den Inhalt der Datei sslCertPath oder sslKeyPath, sodass sie das richtige übereinstimmende Zertifikat und Schlüsselpaar enthält.
  6. Wenden Sie die Änderungen mit Helm auf den Virtualhost an:

    helm upgrade ENV_GROUP_NAME apigee-virtualhost/ \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set envgroup=ENV_GROUP_NAME \
      -f OVERRIDES_FILE

    Achten Sie darauf, alle angezeigten Einstellungen anzugeben, einschließlich --atomic, damit die Aktion bei einem Fehler rückgängig gemacht wird.

Erfassen von Diagnoseinformationen erforderlich

Wenn das Problem auch nach Befolgen der obigen Anweisungen weiterhin besteht, sammeln Sie die folgenden Diagnoseinformationen und wenden Sie sich dann an Google Cloud Customer Care:

  1. Die Google Cloud Projekt-ID.
  2. Der Name der Apigee Hybrid-Organisation.
  3. Das Feld Spec.Details von ApigeeIssue.
  4. (Optional) Dateien, auf die von sslCertPath und sslKeyPath für den betroffenen virtuellen Host verwiesen wird.