Anthos Service Mesh での VM サポートに関する問題の解決
次の手順とログは、Anthos Service Mesh の VM のサポートに関する問題のトラブルシューティングに役立ちます。
VM をデバッグする
VM インスタンスが動作中でも、メッシュから到達できないことがわかった場合は、VM インスタンスで次の手順を行います。
エージェントを確認する
Envoy プロキシの正常性を確認します。
curl localhost:15000/ready -v
envoy エラーログを確認する
less /var/log/envoy/envoy.err.log
service-proxy-agent
エラーの確認をします。journalctl -u service-proxy-agent
インスタンスの Google Cloud のオペレーション スイート ログで、または Debian の
/var/log/syslog
の下にある VM でsyslog
を確認します。Centos の場合は/var/log/messages
を確認します。
プロキシの正常性を確認する
プロキシの構成をデバッグするには、VM で次のコマンドを実行します。
curl localhost:15000/config_dump > config.out
ファイルをコピーして、次のコマンドを実行します。
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 ディストリビューションがサポートされていない可能性があることを意味します。この場合、プロキシで予期しない動作が発生する可能性があります。
クラスタをデバッグする
クラスタの問題をトラブルシューティングするには、次の操作を行います。
自動登録が機能していることを確認する
istiod
が自動生成するWorkloadEntry
を確認します。kubectl get workloadentry -n WORKLOAD_NAMESPACE
さらに、Kubernetes オブジェクト ブラウザの存在を確認します。
存在しない場合は、
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
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
WorkloadGroup
のsecurity.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 のトラブルシューティング ガイド
その他のトラブルシューティング手順については、仮想マシンのデバッグをご覧ください。