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
    

Dienstname prü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 Hostnamen übereinstimmt, der im Attribut name der YAML-Datei mit der gRPC API-Konfiguration (Datei api_config.yaml) angegeben ist.

Wenn sich der falsche Name in der Datei deployment.yaml 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 Hostnamen im Attribut name der Datei api_config.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 api_config.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 api_config.yaml und korrigieren Sie den Hostnamen im Attribut name. Speichern Sie dann die Datei.

  4. Stellen Sie die aktualisierte Dienstkonfiguration bereit:

    gcloud endpoints services deploy api_descriptor.pb api_config.yaml api_config_http.yaml
    

    Warten Sie, bis die Dienstkonfiguration erfolgreich bereitgestellt wurde.

  5. 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.