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 フィールドで指定したサービス名が、OpenAPI ドキュメント(openapi.yaml)の host フィールドの名前と一致していることを確認します。

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

    openapi.yamlhost フィールド内の名前と一致するように SERVICE_NAME を変更して、deployment.yaml ファイルを保存します。

  2. Kubernetes Service を起動します。

      kubectl create -f deployment.yaml
    

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

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

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

    gcloud endpoints services delete SERVICE_NAME
    

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

  3. openapi.yaml ファイルを開き、host フィールドの名前を訂正してファイルを保存します。

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

      gcloud endpoints services deploy openapi.yaml
    
  5. サービス構成のデプロイが正常に完了するまで待ちます。

  6. 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 の取得をご覧ください。