このページでは、Google Cloud コンソールの Anthos Service Mesh ページの問題のトラブルシューティング方法について説明します。
サービスリストに特定のサービスが表示されない
リストにサービスがない場合は、Kubernetes サービス構成がクラスタに存在していることを確認してください。
すべての Kubernetes サービスのリストを取得するには:
kubectl get services --all-namespaces
特定の名前空間内の Kubernetes サービスのリストを取得するには:
kubectl get services -n YOUR_NAMESPACE
サービスのテレメトリー データがない、または正しくない
デフォルトでは、Anthos Service Mesh をインストールすると、Google Cloud プロジェクトで Cloud Monitoring と Cloud Logging が有効になります。テレメトリー データを報告するため、サービス Pod を呼び出す各サイドカー プロキシが Cloud Monitoring API と Cloud Logging API を呼び出します。ワークロードをデプロイしてから Google Cloud コンソールにテレメトリー データが表示されるまでに 1~2 分かかります。Anthos Service Mesh は、サービス ダッシュボードを自動的に最新の状態に保ちます。
指標の場合、サイドカー プロキシは約 1 分ごとに Cloud Monitoring API を呼び出します。
トポロジグラフを更新する場合は、サイドカー プロキシが約 1 分ごとに増分レポートを、約 10 分ごとに完全なレポートを送信します。
ロギングの場合、サイドカー プロキシは約 10 秒ごとに Cloud Logging API を呼び出します。
トレースの場合、Cloud Trace を有効にする必要があります。トレースは、構成したサンプリング頻度でレポートされます(通常は 100 リクエストごとに 1 回)。
Anthos Service Mesh 指標ページに表示されるのは、HTTP サービスの指標のみです。指標が表示されない場合は、次の点を確認してください。
サイドカー プロキシが挿入されたことを確認する
アプリケーションのサービスの名前空間内のすべての Pod にサイドカー プロキシが挿入されていることを確認します。
kubectl get pod -n YOUR_NAMESPACE --all
次に前のコマンドの出力例を示します。ここで、READY
列はワークロードごとに 2 つのコンテナ(プライマリ コンテナとサイドカー プロキシのコンテナ)があることを示しています。
NAME READY STATUS RESTARTS AGE YOUR_WORKLOAD 2/2 Running 0 20s ...
コンテナが 2 つ表示されない場合は、名前空間に istio-injection=enabled
ラベルが付いていることを確認します。これは、自動サイドカー インジェクションが有効であることを示します。
kubectl get ns --show-labels
出力例:
NAME STATUS AGE LABELS default Active 35m istio-injection=enabled istio-system Active 34m istio-injection=disabled,istio-operator-managed=Reconcile
istio-injection=enabled
ラベルが表示されない場合は、次のコマンドを実行して、自動サイドカー インジェクションを有効にします。kubectl label namespace YOUR_NAMESPACE istio-injection=enabled --overwrite
istio-injection=enabled
ラベルが表示され、ワークロードが存在する既存の Google Kubernetes Engine クラスタに Anthos Service Mesh をインストールした場合は、サイドカー プロキシを挿入または現在の Anthos Service Mesh バージョンで更新するために実行中の Pod を再起動する必要があります。詳細については、既存の Pod のサイドカーの更新をご覧ください。
Kubernetes Service のポート名を確認する
Kubernetes Service のポート名をチェックして、Anthos Service Mesh がサービスを HTTP サービスとみなしていることを確認します。Anthos Service Mesh に含めるには、サービスポートに名前を付ける必要があります。名前にはポートのプロトコルを含める必要があります。次に例を示します。
apiVersion: v1 kind: Service metadata: name: ratings labels: app: ratings service: ratings spec: ports: - port: 9080 name: http
サービスポート名には、name: protocol[-suffix]
の構文で接尾辞を含めることができます。ここで、角かっこはダッシュで始まるオプションの接尾辞を示します。次に例を示します。
kind: Service metadata: name: myservice spec: ports: - number: 3306 name: mysql - number: 80 name: http-web
指標を Google Cloud コンソールに表示するには、サービスポートに http
、http2
、grpc
のいずれかのプロトコルを指定する必要があります。https
プロトコルによって名づけられたサービスポートは tcp
として扱われ、これらのサービスの指標は表示されません。
必要な API が有効であることを確認する
Anthos Service Mesh には、テレメトリーを報告して表示するための API がいくつか必要です。gcloud services list
コマンドを使用すると、プロジェクトで利用できる API を確認できます。また、必要な API をすべて有効にして確実に入手することもできます。
Google Cloud CLI のデフォルト プロジェクトを設定します。
gcloud config set project
YOUR_PROJECT_ID
必要な API をすべて有効にします。
gcloud services enable \ container.googleapis.com \ compute.googleapis.com \ monitoring.googleapis.com \ logging.googleapis.com \ meshca.googleapis.com \ meshtelemetry.googleapis.com \ meshconfig.googleapis.com \ iamcredentials.googleapis.com \ anthos.googleapis.com
ASM Mesh Data Plane Service Account があることを確認する
Google Cloud コンソールで [IAM] ページを開きます。
プロジェクトを選択します。
メンバーリストで、ASM Mesh Data Plane Service Account という名前のサービス アカウントを探します。
サービス アカウントがない場合は作成します。
curl --request POST \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ --data '' \ https://meshconfig.googleapis.com/v1alpha1/projects/YOUR_PROJECT_ID:initialize
ワークロードが実行されていることを確認する
Google Cloud コンソールで、GKE の [ワークロード] ページを開きます。
プロジェクトを選択します。
クラスタのフィルタを追加します。アプリケーションと Anthos Service Mesh のすべてのワークロードが稼働中で、ステータスが
OK
であることを確認します。リソース(CPU、メモリなど)の制限により、ワークロードが失敗する可能性があります。その場合、より多くのリソースでクラスタをアップグレードする必要があります。詳細については、クラスタのサイズ変更をご覧ください。
アプリケーションがリクエストを処理していることを確認する
アプリケーションが実際にリクエストを送信していることを確認します。QPS が低くても、トラフィックを受信している必要があります。
トポロジグラフに表示がない
トポロジグラフにサービスが表示されず、エラー メッセージ No data available to graph. Check your filters and try again
が表示される場合は、次の点を確認してください。
メッシュ ID を確認する
クラスタに正しい mesh_id
ラベルがあることを確認します。
プロジェクト番号を取得します。これは、プロジェクトを作成するときに自動的に生成される一意の番号です。
クラスタに
mesh_id: proj-PROJECT_NUMBER
の形式のmesh_id
ラベルがあることを確認します。mesh_id
ラベルがないか、正しくない場合は、修正します。詳細については、既存のクラスタのラベルの追加または更新をご覧ください。次の環境変数を設定します。
プロジェクト ID を設定します。
export PROJECT_ID=
YOUR_PROJECT_ID
プロジェクト番号を設定します。
export PROJECT_NUMBER=YOUR_PROJECT_NUMBER
クラスタ名を設定します。
export CLUSTER_NAME=YOUR_CLUSTER_NAME
CLUSTER_LOCATION
をクラスタのゾーンまたはリージョンに設定します。export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION
ワークロード プールを設定します。
export WORKLOAD_POOL=${PROJECT_ID}.svc.id.goog
メッシュ ID を設定します。
export MESH_ID="proj-${PROJECT_NUMBER}"
以前に使用したのと同じオプションを使用して Anthos Service Mesh を再デプロイします。
Anthos Service Mesh をインストールする前にクラスタで実行されていたワークロードの場合、現在の Anthos Service Mesh を使用するように、サイドカー プロキシを更新する必要があります。
kubectl rollout restart YOUR_DEPLOYMENT -n YOUR_NAMESPACE