API-Aufrufe schlagen mit TLS-Fehlern fehl

Sie lesen die Dokumentation zu Apigee X.
Apigee Edge-Dokumentation aufrufen

Symptom

Möglicherweise tritt eines oder mehrere der folgenden Symptome in Apigee Hybrid auf:

  1. Der Laufzeittraffic funktioniert nicht mehr
  2. Die API-Anfragen schlagen mit TLS-Verbindungsfehlern fehl
  3. Die API-Clients erhalten nicht das erwartete TLS-Zertifikat vom istio-ingressgateway

Fehlermeldungen

Sie werden feststellen, dass die API-Aufrufe mit TLS-Fehlern wie dem folgenden fehlschlagen:

* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to example.apis.com:443
* Closing connection 0
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to example.apis.com:443

Mögliche Ursachen

Ursache Beschreibung
Fehlendes K8S-Secret in Ingress Das K8S-Secret für die org-envgroup fehlt im Namespace istio-system

K8S-Secrets

In Apigee Hybrid werden die virtuellen Hosts für ingress-Traffic mithilfe der Umgebungsgruppen konfiguriert. Das TLS-Zertifikat und die Schlüsseldateien werden für jede Umgebungsgruppe in der Datei overrides.yaml konfiguriert.

Beispiel für die Konfiguration von TLS-Zertifikaten und Schlüsseldateien in overrides.yaml:

org: my-hybrid-project
virtualhosts:
  - name: uat-group
    sslCertPath: ./certs/uat-group-keystore.pem
    sslKeyPath: ./certs/uat-group-keystore.key
  - name: prod-group
    sslCertPath: ./certs/prod-group-keystore.pem
    sslKeyPath: ./certs/prod-group-keystore.key

Während der Installation der Apigee Hybrid-Laufzeit werden diese TLS-Schlüssel und -Zertifikate in den K8S-Secrets im Namespace istio-system gespeichert.

Mit der obigen Konfiguration in der Datei overrides.yaml werden beispielsweise die folgenden K8S-Secrets erstellt:

kubectl -n istio-system get secrets

NAME                            TYPE      DATA   AGE
my-hybrid-project-prod-group    Opaque    2      15h
my-hybrid-project-uat-group     Opaque    2      38m

Da diese K8S-Secrets die erforderlichen TLS-Schlüssel und -Zertifikate speichern, ist es wichtig, dass sie intakt gehalten werden. Diese Secrets können jedoch in den folgenden Situationen gelöscht werden:

  1. ASM wird neu installiert
  2. istio-system-Namespace wird gelöscht
  3. Versehentliches Löschen

Ursache: Fehlendes Secret in Ingress

Diagnose

  1. Analysieren Sie die Logs von istio-ingressgateway-Pods im istio-system-Namespace, um festzustellen, ob Fehler vorliegen.
  2. Möglicherweise tritt ein Fehler wie der folgende auf:
    2021-01-04T23:37:14.542520Z     error   secretfetcher   cannot find secret MY_HYBRID_PROJECT-UAT_GROUP and cannot find fallback secret gateway-fallback
    

    Wobei:

    MY_HYBRID_PROJECT ist der Name der Apigee Hybrid-Organisation.

    UAT_GROUP ist der Name der Umgebungsgruppe.

    Der obige Fehler gibt an, dass secretfetcher das K8S-Secret für die oben erwähnte Umgebungsgruppe der Apigee Hybrid-Organisation nicht finden konnte.

  3. Prüfen Sie mit dem folgenden Befehl, ob die K8S-Secrets tatsächlich fehlen:
    kubectl -n istio-system get secrets
    <no output>
    

    Die obige Beispielausgabe zeigt, dass keine K8S-Secrets vorhanden sind. Sie müssen aufgrund einer der im Abschnitt K8S-Secrets genannten Situationen gelöscht worden sein.

Lösung

Sie können die fehlenden K8S-Secrets mithilfe der Informationen zu TLS-Zertifikaten und -Schlüsseldateien aus der Datei overrides.yaml mit den folgenden Schritten neu erstellen:

  1. Führen Sie den folgenden Befehl aus, um die fehlenden Secrets neu zu erstellen:
    apigeectl apply -f overrides/overrides.yaml --settings virtualhosts
    
  2. Die Ausgabe des obigen Befehls sollte zeigen, dass das Secret erstellt wurde:
    my-hybrid-project-prod-group created
    
  3. Prüfen Sie mit dem folgenden Befehl, ob die K8S-Secrets erfolgreich erstellt wurden:
    kubectl -n istio-system get secrets
    

    NAME                            TYPE      DATA   AGE
    my-hybrid-project-prod-group    Opaque    2      15h
    my-hybrid-project-uat-group     Opaque    2      38m
    

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 Apigee-Support:

  1. Die Google Cloud-Projekt-ID
  2. Der Name der Apigee Hybrid-Organisation
  3. Kubernetes-Clustername
  4. Google Cloud-Projektname, wenn sich der Kubernetes-Cluster in einem anderen Google Cloud-Projekt befindet
  5. Datei overrides.yaml
  6. Erfassen Sie die Logs von jedem istio-ingressgateway-Pod im istio-system-Namespace:
    kubectl logs NAME_OF_ISTIO_INGRESSGATEWAY_POD -n istio-system > /tmp/NAME_OF_ISTIO_INGRESSGATEWAY_POD.log
    
  7. Erfassen Sie die Liste der Secrets im istio-system-Namespace:
    kubectl -n istio-system get secrets
    
  8. Erfassen Sie die Liste der Dienste im istio-system-Namespace:
    kubectl get svc -n istio-system
    
  9. Erfassen Sie die Beschreibung der einzelnen Pods im istio-system-Namespace:
    kubectl describe pod NAME_OF_ISTIO_INGRESSGATEWAY_POD -n istio-system > /tmp/NAME_OF_ISTIO_INGRESSGATEWAY_POD.yaml