このドキュメントでは、istio.istio-system
によって Pod が挿入される際にインストール ツールで生成される HTTP 400
ステータス コードのエラーやクラスタ メンバーシップ エラーなどの、Anthos Service Mesh の一般的な問題とその解決方法について説明します。
Anthos Service Mesh のトラブルシューティングについてサポートが必要な場合は、サポートの利用をご覧ください。
istiod.istio-system によって Pod が挿入される
これは、istio-injection: enabled
ラベルを置き換えていない場合に発生する可能性があります。
次のコマンドを使用して、変更用 Webhook 構成を確認してください。
kubectl get mutatingwebhookconfiguration
...
istiod-asm-managed
…
# may include istio-sidecar-injector
kubectl get mutatingwebhookconfiguration istio-sidecar-injector -o yaml
# Run debug commands
export T=$(echo '{"kind":"TokenRequest","apiVersion":"authentication.k8s.io/v1","spec":{"audiences":["istio-ca"], "expirationSeconds":2592000}}' | kubectl create --raw /api/v1/namespaces/default/serviceaccounts/default/token -f - | jq -j '.status.token')
export INJECT_URL=$(kubectl get mutatingwebhookconfiguration istiod-asmca -o json | jq -r .webhooks[0].clientConfig.url)
export ISTIOD_ADDR=$(echo $INJECT_URL | sed s/inject.*//)
curl -v -H"Authorization: Bearer $T" $ISTIOD_ADDR/debug/configz
インストール ツールで HTTP 400 エラーが発生する
インストール ツールで、次のような HTTP 400
エラーが発生することがあります。
HealthCheckContainerError, message: Cloud Run error: Container failed to start.
Failed to start and then listen on the port defined by the PORT environment
variable. Logs for this revision might contain more information.
このエラーは、Kubernetes クラスタで Workload Identity を有効にしていない場合に発生することがあります。次のコマンドを使用すると有効にできます。
export CLUSTER_NAME=...
export PROJECT_ID=...
export LOCATION=...
gcloud container clusters update $CLUSTER_NAME --zone $LOCATION \
--workload-pool=$PROJECT_ID.svc.id.goog
マネージド データプレーンのステータス
次のコマンドを実行すると、マネージド データプレーンのステータスが表示されます。
kubectl -n istio-system get dataplanecontrol -o custom-columns=REVISION:.spec.revision,STATE:status.state
マネージド データプレーンをデプロイしてから約 10 分後に次のことを確認します。
REVISION STATE
Regular Ready
空のステータス
列ヘッダー REVISION
と STATE
以外の出力が表示されていない場合、データプレーン コントローラがクラスタにデプロイされていないことを意味します。この問題を解決するには、次のコマンドを実行して、クラスタがフリートに登録されているかどうかを確認します。
gcloud container hub memberships list --project=PROJECT_ID
gcloud
コマンドからの出力が空か、クラスタの名前がない場合は、クラスタがフリートに登録されていないことを意味します。この問題を解決するには、インストール ツールを再実行して、コマンドラインに--enable-registration
が含まれていることを確認します(ツールの再実行時にも--option cni-managed
を追加する必要があります)。出力にクラスタの名前が含まれている場合は、次のコマンドを実行して、フリートで Anthos Service Mesh を有効にします。
gcloud alpha container hub mesh enable --project=PROJECT_ID
<nil>
ステータス
これは CNI DaemonSet
に問題があることを示しています。次のコマンドを実行して、CNI DaemonSet
が正常に動作していることを確認します。
kubectl get pods -n kube-system -l k8s-app=istio-cni-node
CNI DaemonSet
が正常に動作している場合、出力は次のようになります。
NAME READY STATUS RESTARTS AGE
istio-cni-node-8w88v 3/3 Running 0 12h
istio-cni-node-c69mn 3/3 Running 0 12h
istio-cni-node-n9pnr 3/3 Running 0 12h
CNI Pod が出力にない場合は、インストール ツールを再実行し、
--option cni-managed
が含まれていることを確認します(ツールの再実行時に、クラスタがフリートに登録されるように--enable-registration
も含める必要があります)。CNI Pod が正常でない場合は、Pod の詳細を取得します。次のコマンドで、
CNI_POD
は正常でない Pod の名前に置き換えます。kubectl -n kube-system describe pod CNI_POD
Cloud サポートに連絡して、正常でない Pod の詳細を伝えます。
クラスタ メンバーシップ エラー(ID プロバイダが指定されていません)
インストール ツールが次のようなクラスタ メンバーシップ エラーで失敗する場合があります。
asmcli: [ERROR]: Cluster has memberships.hub.gke.io CRD but no identity
provider specified. Please ensure that an identity provider is available for the
registered cluster.
このエラーは、クラスタを登録する前に GKE Workload Identity が有効になっていない場合に発生することがあります。コマンドラインで次のコマンドを入力して、クラスタを再登録できます。gcloud container hub memberships register --enable-workload-identity