Résoudre les problèmes liés à 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 Google Cloud Console.

        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 réussissez à envoyer des requêtes à votre API, mais que vous ne voyez pas de métriques, ni de journaux sur la page Endpoints > Services de Cloud Console, vérifiez que le cluster dispose des champs d'application OAuth requis, en procédant comme suit :

  1. Dans Cloud Console, accédez à la page des clusters Kubernetes.

    Accéder à la page des clusters Kubernetes

  2. Sélectionnez votre cluster dans la liste.

  3. Cliquez sur Autorisations.

  4. Confirmez que Service Control et Service Management disposent des champs d'application OAuth suivants :

    • Service Control : activé
    • Service Management : lecture seule

    Si Service Control et Service Management ne disposent pas des champs d'application OAuth requis, vous devez créer un autre cluster qui les possède ou suivre les étapes indiquées sur la page Mettre à jour les champs d'application d'une VM GKE sans temps d'arrêt.

    Pour plus d'informations, consultez la section Que sont les champs d'application d'accès ?

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