Fehlerbehebung bei Cloud Endpoints in GKE

In diesem Dokument werden Methoden zur Fehlerbehebung für Endpoints-Deployments in Google Kubernetes Engine und Kubernetes erläutert.

Fehler in kubectl create -f gke.yaml

Wenn die Fehlermeldung Failed in kubectl create -f gke.yaml angezeigt wird, führen Sie die folgenden Schritte aus:

  1. Autorisieren Sie gcloud:

    gcloud auth login
    gcloud auth application-default login
    
  2. Erstellen Sie einen Cluster. Sie können entweder den folgenden gcloud-Befehl verwenden oder mit einem Cluster, Google Cloud Console.

    gcloud container clusters create CLUSTER_NAME
    

    Ersetzen Sie CLUSTER_NAME durch den Namen Ihres Clusters.

  3. Rufen Sie die Anmeldedaten für Ihren Cluster ab und stellen Sie diese für kubectl bereit:

    gcloud container clusters get-credentials CLUSTER_NAME
    

Endpoints-Messwerte und -Logs werden nicht angezeigt

Wenn Sie erfolgreich Anfragen an Ihre API senden können, aber in der Google Cloud Console auf der Seite Endpoints > Dienste keine Messwerte oder Logs sehen, führen Sie die folgenden Schritte aus:

  1. Prüfen Sie, ob alle erforderlichen Dienste aktiviert sind.
  2. Prüfen Sie, ob alle erforderlichen Berechtigungen erteilt wurden.

Auf Extensible Service Proxy-Logs zugreifen

Wenn Sie zur Diagnose von Problemen auf die ESP-Logs (Extensible Service Proxy) zugreifen müssen, verwenden Sie kubectl so:

  1. Rufen Sie den Namen des Pods ab:

    kubectl get pod
    
    NAME                       READY     STATUS    RESTARTS   AGE
    esp-echo-174578890-x09gl   2/2       Running   2          21s
    

    Der Name des Pods lautet esp-echo-174578890-x09gl. Er enthält die beiden Container esp und echo.

  2. So rufen Sie die Logs in einem Pod mithilfe von kubectl logs auf:

    kubectl logs POD_NAME -c CONTAINER_NAME
    

    Dabei sind POD_NAME und CONTAINER_NAME die vom Befehl kubectl get pod aus dem vorherigen Schritt zurückgegebenen Werte. Beispiel:

      kubectl logs esp-echo-174578890-x09gl -c esp
    

Dienstnamen überprüfen

Wenn Sie die Fehlermeldung Fetching service config failed erhalten, prüfen Sie, ob der im Feld --service der Deployment-Manifestdatei (Datei deployment.yaml) angegebene Dienstname mit dem Namen übereinstimmt, der im Feld host des OpenAPI-Dokuments (Datei openapi.yaml) angegeben ist.

Wenn sich in der Datei deployment.yaml ein falscher Name befindet:

  1. Öffnen Sie die Datei deployment.yaml und suchen Sie den Abschnitt, der für den ESP-Container konfiguriert ist. Beispiel:

    containers:
    - name: esp
      image: gcr.io/endpoints-release/endpoints-runtime:1
      args: [
        "--http_port=8081",
        "--backend=127.0.0.1:8080",
        "--service=SERVICE_NAME",
        "--rollout_strategy=managed"
      ]
    

    Ändern Sie SERVICE_NAME so, dass er mit dem Namen im Feld host in openapi.yaml übereinstimmt. Speichern Sie dann die Datei deployment.yaml.

  2. Starten Sie den Kubernetes-Dienst:

      kubectl create -f deployment.yaml
    

Wenn sich der falsche Name in der Datei openapi.yaml befindet:

  1. Rufen Sie den Dienstnamen ab, der für die Verwendung durch Endpoints konfiguriert wurde.

  2. Löschen Sie den Dienst:

    gcloud endpoints services delete SERVICE_NAME
    

    Ersetzen Sie SERVICE_NAME durch den Namen aus dem vorherigen Schritt. Es dauert 30 Tage, bis der Dienst aus Google Cloud gelöscht wird. Sie können den Dienstnamen während dieser Zeit nicht wiederverwenden.

  3. Öffnen Sie die Datei openapi.yaml und korrigieren Sie den Namen im Feld host. Speichern Sie dann die Datei.

  4. Stellen Sie die aktualisierte Dienstkonfiguration bereit:

      gcloud endpoints services deploy openapi.yaml
    
  5. Warten Sie, bis die Dienstkonfiguration erfolgreich bereitgestellt wurde.

  6. Starten Sie den Kubernetes-Dienst:

      kubectl create -f deployment.yaml
    

Konfigurationsdateien prüfen

  1. Verwenden Sie ssh, um mit kubectl eine Verbindung zum Pod herzustellen:

    kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
    

    Ersetzen Sie CONTAINER_NAME durch den Namen des Containers und POD_NAME durch den Namen des Pods.

  2. Prüfen Sie im Verzeichnis etc/nginx/endpoints/ die folgenden Konfigurationsdateien auf Fehler:

    • nginx.conf: Die nginx-Konfigurationsdatei mit ESP-Anweisungen
    • service.jso: Die Dienstkonfigurationsdatei

Endpoints-Statusseite aufrufen

Wenn rollout_strategy beim Start des ESP auf managed festgelegt war und Sie die Konfigurations-ID herausfinden müssen, die eine Instanz des ESP verwendet, können Sie die entsprechende Information auf der Endpoints-Statusseite abrufen.

So rufen Sie die Endpoints-Statusseite auf:

  1. Verwenden Sie ssh, um mit kubectl eine Verbindung zum Pod herzustellen:

    kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
    

    Ersetzen Sie CONTAINER_NAME durch den Namen des Containers und POD_NAME durch den Namen des Pods.

  2. Installieren Sie curl:

  3. Geben Sie Folgendes ein:

      curl http://localhost:8090/endpoints_status
    

    Es wird in etwa Folgendes angezeigt:

    "serviceConfigRollouts": {
        "rolloutId": "2017-08-09r27",
        "percentages": {
             "2017-08-09r26": "100"
        }
    }
    

Der Wert in rolloutId ist die Dienstkonfigurations-ID, die vom ESP verwendet wird. Wie Sie prüfen, ob der ESP dieselbe Konfiguration wie Endpoints verwendet, erfahren Sie unter Dienstname und Konfigurations-ID abrufen.