Anthos Service Mesh での VM サポートに関する問題の解決

次の手順とログは、Anthos Service Mesh の VM のサポートに関する問題のトラブルシューティングに役立ちます。

VM をデバッグする

VM インスタンスが動作中でも、メッシュから到達できないことがわかった場合は、VM インスタンスで次の手順を行います。

エージェントを確認する

  1. Envoy プロキシの正常性を確認します。

    curl localhost:15000/ready -v
    
  2. envoy エラーログを確認する

    less /var/log/envoy/envoy.err.log
    
  3. service-proxy-agent エラーの確認をします。

    journalctl -u service-proxy-agent
    
  4. インスタンスの Google Cloud のオペレーション スイート ログで、または Debian の /var/log/syslog の下にある VM で syslog を確認します。Centos の場合は /var/log/messages を確認します。

プロキシの正常性を確認する

  1. プロキシの構成をデバッグするには、VM で次のコマンドを実行します。

    curl localhost:15000/config_dump > config.out
    
  2. ファイルをコピーして、次のコマンドを実行します。

    istioctl proxy-config [cluster|route|listener] --file config.out
    

無効なトークンエラー

envoy エラーログに次のようなエラーが表示される場合があります。

E0217 17:59:17.206995798    2411 oauth2_credentials.cc:152]  Call to http server ended with error 500 [{
  "error": "invalid_target",
  "error_description": "federated token response does not have access token. {\"error\":\"invalid_grant\",\"error_description\":\"JWT expired.\"}",
  "error_uri": ""
}].

その場合は、VM の /var/run/secrets/tokens/istio-token のトークンが期限切れであるかどうかを確認し、exp(エポック秒)の値が経過していないことを確認します。

cat /var/run/secrets/tokens/istio-token | cut -d '.' -f2 | base64 -d | python -m json.tool
{
    ...
    "azp": "...",
    "email": "example-service-account@developer.gserviceaccount.com",
    "email_verified": true,
    "exp": 1613995395,
    "google": {
        "compute_engine": {
            "instance_creation_timestamp": 1613775765,
            "instance_id": "5678",
            "instance_name": "vm-instance-03-0mqh",
            "project_id": "...",
            "project_number": 1234,
            "zone": "us-central1-c"
        }
    },
    "iat": ...,
    "iss": "https://accounts.google.com",
    "sub": "..."
}

サポートされていない OS ディストリビューションの警告情報

エージェントを確認し、service-proxy-agent ログに次のような警告メッセージが表示された場合:

E0217 17:59:17.206995798    2021-04-09T21:21:29.6091Z service-proxy-agent Warn
Detected image is unsupported: [Ubuntu|Fedora|Suse]. Envoy may not work correctly.

これは、Linux ディストリビューションがサポートされていない可能性があることを意味します。この場合、プロキシで予期しない動作が発生する可能性があります。

クラスタをデバッグする

クラスタの問題をトラブルシューティングするには、次の操作を行います。

自動登録が機能していることを確認する

  1. istiod が自動生成する WorkloadEntry を確認します。

    kubectl get workloadentry -n WORKLOAD_NAMESPACE
    

    さらに、Kubernetes オブジェクト ブラウザの存在を確認します。

  2. 存在しない場合は、istiod ログでエラーを確認します。このログは Google Cloud のオペレーション スイートで使用できるはずです。また、直接取得することもできます。

    kubectl -n istio-system get pods -l app=istiod
    

    予想される出力は次のようになります。

    NAME                                       READY   STATUS    RESTARTS   AGE
    istiod-asm-190-1-7f6699cfb-5mzxw           1/1     Running   0          5d13h
    istiod-asm-190-1-7f6699cfb-pgvpf           1/1     Running   0          5d13h
    
  3. Pod の環境変数を設定し、それを使用してログをエクスポートします。

    export ISTIO_POD=istiod-asm-190-1-7f6699cfb-5mzxw
    kubectl logs -n istio-system ${ISTIO_POD} | grep -i 'auto-register\|WorkloadEntry'
    

接続プロキシを確認する

proxy-status コマンドを使用すると、すべての接続プロキシ(VM 用のプロキシを含む)の一覧を取得できます。

istioctl proxy-status

出力には、次のような接続プロキシが表示されます。

NAME                                                    CDS        LDS        EDS        RDS          ISTIOD                               VERSION
details-v1-5f449bdbb9-bhl8d.default                     SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-5mzxw     1.9.0-asm.1
httpbin-779c54bf49-647vd.default                        SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-pgvpf     1.9.0-asm.1
istio-eastwestgateway-5b6d4ddd9d-5rzx2.istio-system     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-asm-190-1-7f6699cfb-pgvpf     1.9.0-asm.1
istio-ingressgateway-66b6ddd7cb-ctb6b.istio-system      SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-pgvpf     1.9.0-asm.1
istio-ingressgateway-66b6ddd7cb-vk4bb.istio-system      SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-5mzxw     1.9.0-asm.1
vm-instance-03-39b3.496270428946                        SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-pgvpf     1.9.0
vm-instance-03-nh5k.496270428946                        SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-pgvpf     1.9.0
vm-instance-03-s4nl.496270428946                        SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-5mzxw     1.9.0

コマンド オプションの詳細については、istioctl proxy-config をご覧ください。

Workload Identity の構成を確認する

クラスタの潜在的なエラーについて、mesh の状態を確認します。最新バージョンの gcloud が必要です。詳しくは、最新バージョンに更新するをご覧ください。

gcloud alpha container hub mesh describe --project=PROJECT_ID

有効な構成では、メンバー クラスタに OK のステータス コードが含まれます。

createTime: '2021-06-15T21:56:10.221032150Z'
featureState:
  detailsByMembership:
    projects/<your project number>/locations/global/memberships/<your cluster name>:
      code: OK
      description: Revision(s) ready for use: istiod-asm-195-2.
      updateTime: 2021-06-15T21:56:10.221032402Z
  lifecycleState: ENABLED
name: projects/<your project name>/locations/global/features/servicemesh
servicemeshFeatureSpec: {}
updateTime: '2021-06-15T21:56:10.221032402Z'

VM が正しく構成されていない場合、ステータス コードは WARNING になり、説明に追加の詳細が含まれます。

createTime: '2021-06-15T22:56:10.227167202Z'
featureState:
  detailsByMembership:
    projects/<your project number>/locations/global/memberships/<your cluster name>:
      code: WARNING
      description: |-
        Revision(s) ready for use: istiod-asm-195-2.
        WorkloadGroup <namespace>/<workloadgroup name> missing ServiceAccount field, please see https://cloud.google.com/service-mesh/docs/troubleshooting/troubleshoot-vms#verify_the_workloadgroup_is_set_up_correctly.
      servicemeshFeatureState: {}
      updateTime: '2021-06-15T22:56:00.220164192Z'
  lifecycleState: ENABLED
name: projects/<your project name>/locations/global/features/servicemesh
servicemeshFeatureSpec: {}
updateTime: '2021-06-15T22:56:10.227167402Z'

ID プロバイダが正しく設定されていることを確認する

IdentityProvider リソース フィールドを確認します。

 kubectl describe identityprovider

フィールドが次の要件を満たしていることを確認します。

  • serviceAccount フィールドが request.auth.claims["email"] に設定されている。
  • issuerURI フィールドが https://accounts.google.com に設定されている(現在、issuerURI としてサポートされているのは Google のみです)。
  • メタデータの下のプロバイダの name フィールドが、現在サポートされている唯一のプロバイダである google に設定されている。

    有効な IdentityProvider CR の例:

    apiVersion: security.cloud.google.com/v1alpha1
    kind: IdentityProvider
    metadata:
      name: google
    spec:
      authentication:
        oidc:
          issuerUri: https://accounts.google.com
      serviceAccount: request.auth.claims["email"]
    

WorkloadGroup が正しく設定されていることを確認する

WorkloadGroup を確認します。

 kubectl get workloadgroup -n WORKLOAD_NAMESPACE

結果が次の要件を満たしていることを確認します。

  • serviceAccount フィールドが正しく設定されている。例: 373206437219-compute@developer.gserviceaccount.com。このアカウントは、VM インスタンスによって使用されるサービス アカウントと同じです。
  • アノテーション フィールドの下に security.cloud.google.com/IdentityProvider が設定されている。例: security.cloud.google.com/IdentityProvider: google
  • ワークロード グループが、既存の ID プロバイダを確認することで検証できる有効な IdentityProvider を参照している。

    kubectl describe identityprovider
    

    次のように、既存のプロバイダのリストが出力されます。

     NAME     AGE
     google   39m
    

    WorkloadGroupsecurity.cloud.google.com/IdentityProvider フィールドで、プロバイダが既存のプロバイダのリストにあるかどうか確認します。

    有効な WorkloadGroup CR の例:

    apiVersion: networking.istio.io/v1alpha3
    kind: WorkloadGroup
    metadata:
    name: wg-a
    namespace: foo
    spec:
    metadata:
      annotations:
        security.cloud.google.com/IdentityProvider: google
      labels:
        app: wg-a
    template:
      ports:
        grpc: 3550
        http: 8080
      serviceAccount: 373206437219-compute@developer.gserviceaccount.com
    

Internal Error Found

Internal Error Found というメッセージが表示された場合は、サポートの利用をご覧ください。

Istio VM のトラブルシューティング ガイド

その他のトラブルシューティング手順については、仮想マシンのデバッグをご覧ください。