API-Proxy-Bereitstellungen schlagen fehl, weil apigee-serving-cert nicht gefunden wurde oder abgelaufen ist

Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen.

Symptome

API-Proxy-Bereitstellungen schlagen mit den folgenden Fehlermeldungen fehl.

Fehlermeldungen

Wenn das TLS-Zertifikat des Dienstes apigee-webhook-service.apigee-system.svc abgelaufen oder noch nicht gültig ist, wird die folgende Fehlermeldung in Logs vom Typ apigee-watcher angezeigt:

{"level":"error","ts":1687991930.7745812,"caller":"watcher/watcher.go:60",
"msg":"error during watch","name":"ingress","error":"INTERNAL: INTERNAL: failed
to update ApigeeRoute [org-env]-group-84a6bb5, namespace apigee:
Internal error occurred: failed calling webhook
\"mapigeeroute.apigee.cloud.google.com\": Post
\"https://apigee-webhook-service.apigee-system.svc:443/mutate-apigee-cloud-google-com-v1alpha1-apigeeroute?timeout=30s\":
x509:
certificate has expired or is not yet valid: current time
2023-06-28T22:38:50Z is after 2023-06-17T17:14:13Z, INTERNAL: failed to update
ApigeeRoute [org-env]-group-e7b3ff6, namespace apigee 

Mögliche Ursachen

Ursache Beschreibung
Das Apigee-Bereitstellungszertifikat wurde nicht gefunden Wenn apigee-serving-cert im Namespace apigee-system nicht gefunden wird, kann dieses Problem auftreten.
Doppelte Zertifikatsanfragen wurden zur Verlängerung von apigee-serving-cert erstellt Wenn doppelte Zertifikatsanfragen zur Verlängerung des apigee-serving-cert-Zertifikats erstellt werden, wird das apigee-serving-cert-Zertifikat möglicherweise nicht verlängert.
cert-manager ist nicht fehlerfrei Wenn cert-manager nicht fehlerfrei ist, wird das Zertifikat apigee-serving-cert möglicherweise nicht verlängert.

Ursache: Das Apigee-Bereitstellungszertifikat wurde nicht gefunden

Diagnose

  1. Prüfen Sie die Verfügbarkeit des Zertifikats apigee-serving-cert im Namespace apigee-system:

    kubectl -n apigee-system get certificates apigee-serving-cert
    

    Wenn dieses Zertifikat verfügbar ist, sollte die Ausgabe in etwa so aussehen:

    NAME                  READY   SECRET                AGE
    apigee-serving-cert   True    webhook-server-cert   2d10h
  2. Wenn das Apigee-Serving-Zertifikat nicht im Namespace apigee-system gefunden wird, kann dies der Grund für das Problem sein.

Lösung

  1. apigee-serving-cert wird während der Installation von Apigee Hybrid durch den Befehl apigeectl init erstellt. Führen Sie daher diesen Befehl mit der entsprechenden Datei overrides.yaml aus, um sie neu zu erstellen:
    apigeectl init -f overrides/overrides.yaml
  2. Prüfen Sie, ob das Zertifikat apigee-serving-cert erstellt wurde:
    kubectl -n apigee-system get certificates apigee-serving-cert

Ursache: Doppelte Zertifikatsanfragen wurden zur Verlängerung von apigee-serving-cert erstellt

Diagnose

  1. Prüfen Sie die cert-manager-Controller-Logs und prüfen Sie, ob eine Fehlermeldung ähnlich der folgenden zurückgegeben wurde.

    Listen Sie alle cert-manager-Pods auf:

    kubectl -n cert-manager get pods

    Beispielausgabe:

    NAME                                       READY   STATUS    RESTARTS        AGE
    cert-manager-66d9545484-772cr              1/1     Running   0               6d19h
    cert-manager-cainjector-7d8b6bd6fb-fpz6r   1/1     Running   0               6d19h
    cert-manager-webhook-669b96dcfd-6mnm2      1/1     Running   0               6d19h

    Prüfen Sie die cert-manager-Controller-Logs:

    kubectl -n cert-manager logs cert-manager-66d9545484-772cr | grep "issuance is skipped until there are no more duplicates"

    Beispielausgabe:

    1 controller.go:163] cert-manager/certificates-readiness "msg"="re-queuing item due to error processing" "error"="multiple CertificateRequests were found for the 'next' revision 3, issuance is skipped until there are no more duplicates" "key"="apigee-system/apigee-serving-cert"

    Wenn eine Fehlermeldung wie diese angezeigt wird, wird das apigee-serving-cert-Zertifikat nicht verlängert.

  2. Listen Sie alle Zertifikatsanfragen im Namespace apigee-system auf und prüfen Sie, ob mehrere Zertifikatsanfragen für die Verlängerung derselben apigee-serving-cert-Zertifikatsüberarbeitung erstellt wurden:
    kubectl -n apigee-system get certificaterequests

Das für dieses Problem relevante Problem cert-manager finden Sie unter cert-manager hat mehrere CertificateRequest-Objekte mit derselben Zertifikatsprüfung erstellt.

Lösung

  1. Löschen Sie alle Zertifikatsanfragen im Namespace apigee-system:
    kubectl -n apigee-system delete certificaterequests --all
  2. Prüfen Sie, ob doppelte Zertifikatsanfragen gelöscht wurden und nur eine Zertifikatsanfrage für das Zertifikat apigee-serving-cert im Namespace apigee-system verfügbar ist:
    kubectl -n apigee-system get certificaterequests
  3. Prüfen Sie, ob das Zertifikat apigee-serving-cert verlängert wurde:
    kubectl -n apigee-system get certificates apigee-serving-cert -o yaml

    Beispielausgabe:

    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      creationTimestamp: "2023-06-26T13:25:10Z"
      generation: 1
      name: apigee-serving-cert
      namespace: apigee-system
      resourceVersion: "11053"
      uid: e7718341-b3ca-4c93-a6d4-30cf70a33e2b
    spec:
      dnsNames:
      - apigee-webhook-service.apigee-system.svc
      - apigee-webhook-service.apigee-system.svc.cluster.local
      issuerRef:
        kind: Issuer
        name: apigee-selfsigned-issuer
      secretName: webhook-server-cert
    status:
      conditions:
      - lastTransitionTime: "2023-06-26T13:25:11Z"
        message: Certificate is up to date and has not expired
        observedGeneration: 1
        reason: Ready
        status: "True"
        type: Ready
      notAfter: "2023-09-24T13:25:11Z"
      notBefore: "2023-06-26T13:25:11Z"
      renewalTime: "2023-08-25T13:25:11Z"
      revision: 1

Ursache: cert-manager ist nicht fehlerfrei

Diagnose

  1. Prüfen Sie den Status der cert-manager-Pods im Namespace cert-manager:
    kubectl -n cert-manager get pods

    Wenn cert-manager-Pods fehlerfrei sind, sollten alle cert-manager-Pods (1/1) und im Status Running bereit sein. Andernfalls kann dies der Grund für das Problem sein:

    NAME                                       READY   STATUS    RESTARTS   AGE
    cert-manager-59cf78f685-mlkvx              1/1     Running   0          15d
    cert-manager-cainjector-78cc865768-krjcp   1/1     Running   0          15d
    cert-manager-webhook-77c4fb46b6-7g9g6      1/1     Running   0          15d
  2. Der cert-manager kann aus verschiedenen Gründen fehlschlagen. Prüfen Sie die cert-manager-Logs, identifizieren Sie den Grund für den Fehler und beheben Sie sie entsprechend.

    Ein bekannter Grund ist, dass cert-manager fehlschlägt, wenn er nicht mit der Kubernetes API kommunizieren kann. In diesem Fall erhalten Sie eine Fehlermeldung ähnlich der folgenden:

    E0601 00:10:27.841516       1 leaderelection.go:330] error retrieving
    resource lock kube-system/cert-manager-controller: Get
    "https://192.168.0.1:443/api/v1/namespaces/kube-system/configmaps/cert-manager-controller":
    dial tcp 192.168.0.1:443: i/o timeout

Lösung

  1. Prüfen Sie den Status des Kubernetes-Clusters und beheben Sie etwaige Probleme. Siehe Fehlerbehebung für Cluster.
  2. Weitere Informationen Fehlerbehebung für zusätzlichecert-manager Informationen zur Fehlerbehebung.

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 den Google Cloud Customer Care:

  1. Google Cloud-Projekt-ID
  2. Apigee Hybrid-Organisation
  3. Apigee Hybrid-overrides.yaml-Datei, in der alle vertraulichen Informationen maskiert sind.
  4. Kubernetes-Pod-Status in allen Namespaces:
    kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
  5. Kubernetes-Dump cluster-info:
    # generate kubernetes cluster-info dump
    kubectl cluster-info dump -A --output-directory=/tmp/kubectl-cluster-info-dump
    # zip kubernetes cluster-info dump
    zip -r kubectl-cluster-info-dump`date +%Y.%m.%d_%H.%M.%S`.zip /tmp/kubectl-cluster-info-dump/*