Dépannage de Cloud Endpoints dans GKE

Ce document présente des techniques de dépannage pour les déploiements Endpoints sur Google Kubernetes Engine (GKE) et Kubernetes.

Message d'erreur "Failed in kubectl create -f gke.yaml"

Si vous rencontrez le message d'erreur Failed in kubectl create -f gke.yaml, procédez comme suit :

  1. Autorisez gcloud :

    gcloud auth login
    gcloud auth application-default login
    
  2. Créez un cluster. Vous pouvez utiliser la commande gcloud suivante ou créer un cluster à l'aide de la console Google Cloud.

    gcloud container clusters create CLUSTER_NAME
    

    Remplacez CLUSTER_NAME par le nom de votre cluster.

  3. Obtenez des identifiants pour votre cluster et mettez-les à la disposition de kubectl :

    gcloud container clusters get-credentials CLUSTER_NAME
    

Les métriques et les journaux de Cloud Endpoints ne sont pas affichés

Si vous pouvez envoyer des requêtes à votre API, mais que les métriques et les journaux ne s'affichent pas sur la page Endpoints > Services de la console Google Cloud, procédez comme suit :

  1. Vérifiez que tous les services requis sont activés.
  2. Vérifiez que toutes les autorisations requises sont accordées.

Accéder aux journaux d'Extensible Service Proxy

Si vous devez accéder aux journaux d'Extensible Service Proxy (ESP) pour diagnostiquer les problèmes, utilisez kubectl comme suit :

  1. Récupérez le nom du pod :

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

    Le nom du pod est esp-echo-174578890-x09gl. Il comporte deux conteneurs : esp et echo.

  2. Pour afficher les journaux dans un pod, utilisez kubectl logs :

    kubectl logs POD_NAME -c CONTAINER_NAME
    

    POD_NAME et CONTAINER_NAME sont les valeurs renvoyées par la commande kubectl get pod à l'étape précédente. Exemple :

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

Vérifier le nom du service

Si vous rencontrez le message d'erreur Fetching service config failed, vérifiez que le nom du service que vous avez spécifié dans le champ --service de votre fichier manifeste de déploiement (appelé deployment.yaml) correspond au nom d'hôte spécifié dans la propriété name de votre fichier YAML de configuration de l'API gRPC (appelé api_config.yaml).

Si le fichier deployment.yaml comporte un nom incorrect :

  1. Ouvrez le fichier deployment.yaml, puis allez à la section configurée pour le conteneur ESP. Exemple :

    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"
      ]
      

    Modifiez SERVICE_NAME afin qu'il corresponde au nom d'hôte spécifié dans la propriété name du fichier api_config.yaml, puis enregistrez le fichier deployment.yaml.

  2. Démarrez le service Kubernetes :

      kubectl create -f deployment.yaml
    

Si le fichier api_config.yaml comporte un nom incorrect :

  1. Obtenez le nom du service pour lequel Endpoints est configuré.

  2. Supprimez le service :

    gcloud endpoints services delete SERVICE_NAME
    

    Remplacez SERVICE_NAME par le nom récupéré à l'étape précédente. Il faut 30 jours pour que le service soit supprimé de Google Cloud. Vous ne pourrez pas réutiliser le nom du service pendant ce laps de temps.

  3. Ouvrez api_config.yaml et corrigez le nom d'hôte dans la propriété name, puis enregistrez le fichier.

  4. Déployez la configuration de service mise à jour :

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

    Attendez que la configuration du service soit déployée avec succès.

  5. Démarrez le service Kubernetes :

      kubectl create -f deployment.yaml
    

Vérifier les fichiers de configuration

  1. Utilisez ssh pour vous connecter au pod à l'aide de kubectl :

    kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
    

    Remplacez CONTAINER_NAME par le nom de votre conteneur et POD_NAME par celui de votre pod.

  2. Dans le répertoire etc/nginx/endpoints/, recherchez des erreurs dans les fichiers de configuration suivants :

    • nginx.conf : fichier de configuration nginx avec les directives ESP
    • service.jso : fichier de configuration du service

Accéder à la page d'état de Cloud Endpoints

Si vous avez défini rollout_strategy sur managed lorsque vous avez démarré ESP et que vous recherchez l'ID de configuration utilisé par une instance ESP, vous devez consulter la page d'état de Cloud 'Endpoints.

Pour accéder à la page d'état de Cloud Endpoints :

  1. Utilisez ssh pour vous connecter au pod à l'aide de kubectl :

    kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
    

    Remplacez CONTAINER_NAME par le nom de votre conteneur et POD_NAME par celui de votre pod.

  2. Installez curl.

  3. Saisissez les chaînes suivantes :

      curl http://localhost:8090/endpoints_status
    

    Un résultat semblable au suivant s'affiche :

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

La valeur de rolloutId est l'ID de configuration de service utilisé par ESP. Pour vous assurer qu'ESP utilise la même configuration que Cloud Endpoints, consultez la page Obtenir le nom du service et l'ID de configuration.