GKE での Cloud Endpoints のトラブルシューティング

このドキュメントでは、Google Kubernetes Engine(GKE)と Kubernetes での Endpoints の Deployment に関するトラブルシューティング方法について説明します。

kubectl create -f gke.yaml のエラー

Failed in kubectl create -f gke.yaml」というエラー メッセージが表示されたら、次の操作を行います。

  1. gcloud を承認します。

    gcloud auth login
    gcloud auth application-default login
    
  2. クラスタを作成します。次の gcloud コマンドを使用するか、Google Cloud Console を使用してクラスタを作成します。

    gcloud container clusters create CLUSTER_NAME
    

    CLUSTER_NAME をクラスタ名で置き換えます。

  3. クラスタの認証情報を取得し、kubectl で使用可能にします。

    gcloud container clusters get-credentials CLUSTER_NAME
    

Endpoints の指標とログが表示されない

API にリクエストを正常に送信できたものの、Google Cloud コンソールの [Endpoints] > [サービス] ページに指標またはログが表示されない場合は、次の手順を行います。

  1. 必要なサービスがすべて有効になっていることを確認します。
  2. 必要な権限がすべて付与されていることを確認します。

Extensible Service Proxy ログにアクセスする

問題を診断するために Extensible Service Proxy(ESP)ログにアクセスする必要がある場合は、次のように kubectl を使用します。

  1. ポッドの名前を取得します。

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

    ポッド名は esp-echo-174578890-x09gl で、especho の 2 つのコンテナがあります。

  2. ポッドのログを表示するには、kubectl logs を使用します。

    kubectl logs POD_NAME -c CONTAINER_NAME
    

    POD_NAMECONTAINER_NAME は、前のステップの kubectl get pod コマンドから返されます。例:

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

サービス名を確認する

Fetching service config failed」というエラー メッセージが表示されたら、Deployment マニフェスト ファイル(deployment.yaml ファイル)の --service フィールドに指定したサービス名が、gRPC API 構成 YAML ファイル(api_config.yaml)の name プロパティに指定されているホスト名と一致することを確認します。

deployment.yaml ファイルに誤った名前が指定されている場合:

  1. deployment.yaml ファイルを開き、ESP コンテナ用に構成されたセクションに進みます。例:

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

    api_config.yaml ファイルの name プロパティのホスト名に一致するように SERVICE_NAME を変更し、deployment.yaml ファイルを保存します。

  2. Kubernetes Service を起動します。

      kubectl create -f deployment.yaml
    

api_config.yaml ファイルに誤った名前が指定されている場合:

  1. Endpoints で使用するように構成されていたサービス名を取得します

  2. サービスを削除します。

    gcloud endpoints services delete SERVICE_NAME
    

    SERVICE_NAME は、前のステップで取得した名前に置き換えます。サービスが Google Cloud から削除されるまでに 30 日かかります。この間に同じサービス名を再利用することはできません。

  3. api_config.yaml ファイルを開き、name プロパティのホスト名を修正してファイルを保存します。

  4. 更新されたサービス構成をデプロイします。

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

    サービス構成のデプロイが正常に完了するまで待ちます。

  5. Kubernetes Service を起動します。

      kubectl create -f deployment.yaml
    

構成ファイルを確認する

  1. kubectl を使用してポッドに接続するには、ssh を使用します。

    kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
    

    CONTAINER_NAME をコンテナ名に、POD_NAME をポッド名に置き換えます。

  2. etc/nginx/endpoints/ ディレクトリで、以下の構成ファイルにエラーがないか調べます。

    • nginx.conf - ESP ディレクティブを含む nginx 構成ファイル
    • service.jso - サービス構成ファイル

Endpoints ステータス ページを表示する

ESP の起動時に rollout_strategymanaged に設定しており、ESP インスタンスが使用している構成 ID を確認する必要がある場合は、Endpoints ステータス ページに情報があります。

Endpoints ステータス ページにアクセスするには:

  1. kubectl を使用してポッドに接続するには、ssh を使用します。

    kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
    

    CONTAINER_NAME をコンテナ名に、POD_NAME をポッド名に置き換えます。

  2. curl をインストールします。

  3. 次の情報を入力します。

      curl http://localhost:8090/endpoints_status
    

    次のような内容が表示されます。

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

rolloutId の値は、ESP が使用しているサービス構成 ID です。ESP が Endpoints と同じ構成を使用するようにするには、サービス名と構成 ID の取得をご覧ください。