Istio サービス メッシュ アドオンの一般的なトラブルシューティング
この記事では、Microsoft Azure Kubernetes Service (AKS) の Istio サービス メッシュ アドオンに関連する問題をトラブルシューティングするための一般的な戦略 ( kubectl
、 istioctl
、およびその他のツールを使用) について説明します。 この記事では、考えられるエラー メッセージ、エラー発生の理由、およびこれらのエラーを解決するための推奨事項の一覧も示します。
前提条件
Kubernetes kubectl ツール、またはクラスターに接続するための同様のツール
注: Azure CLI を使用して kubectl をインストールするには、 az aks install-cli コマンドを実行します。
Istio istioctl コマンドライン ツール
クライアント URL (cURL) ツール
トラブルシューティング チェックリスト: kubectl の使用
次のトラブルシューティング手順では、さまざまな kubectl
コマンドを使用して、Istio デーモン (Istiod) でスタックしているポッドや障害をデバッグするのに役立ちます。
手順 1: Istiod ポッド ログを取得する
次の kubectl logs コマンドを実行して、Istiod ポッド ログを取得します。
kubectl logs --selector app=istiod --namespace aks-istio-system
手順 2: ポッドをバウンス (削除) する
ポッドを再起動する理由が十分にある可能性があります。 Istiod はデプロイであるため、 kubectl delete コマンドを実行してポッドを削除するだけで安全です。
kubectl delete pods <istio-pod> --namespace aks-istio-system
Istio ポッドはデプロイによって管理されるため、Istio ポッドを直接削除すると、ポッドが自動的に再作成され、再デプロイされます。 そのため、ポッドを削除することは、ポッドを再起動するための別の方法です。
Note
または、次の kubectl ロールアウトの再起動 コマンドを実行して、デプロイを直接再起動することもできます。
kubectl rollout restart deployment <istiod-asm-revision> --namespace aks-istio-system
手順 3: リソースの状態を確認する
Istiod がスケジュールされていない場合、またはポッドが応答していない場合は、デプロイとレプリカ セットの状態を確認できます。 これを行うには、 kubectl get コマンドを実行します。
kubectl get <resource-type> [[--selector app=istiod] | [<resource-name>]]
現在のリソースの状態は、出力の末尾付近に表示されます。 出力には、コントローラー ループに関連付けられているイベントが表示される場合もあります。
手順 4: カスタム リソース定義の種類を取得する
Istio が使用するカスタム リソース定義 (CRD) の種類を表示するには、 kubectl get
コマンドを実行します。
kubectl get crd | grep istio
次に、次の kubectl get
コマンドを実行して、特定の CRD に基づくすべてのリソース名を一覧表示します。
kubectl get <crd-type> --all-namespaces
手順 5: Istiod ポッドの一覧を表示する
次の kubectl get
コマンドを実行して、Istiod ポッドの一覧を表示します。
kubectl get pod --namespace aks-istio-system --output yaml
手順 6: Envoy の構成に関する詳細情報を取得する
ポッド間に接続の問題がある場合は、Envoy の管理ポートに対して次の kubectl exec コマンドを実行して、Envoy 構成に関する詳細情報を取得します。
kubectl exec --namespace <pod-namespace> \
"$(kubectl get pods \
--namespace <pod-namespace> \
--selector app=sleep \
--output jsonpath='{.items[0].metadata.name}')" \
--container sleep \
-- curl -s localhost:15000/clusters
手順 7: ソースと宛先のサイドカーのサイドカー ログを取得する
次の kubectl logs
コマンドを 2 回 (ソース ポッドの場合は 1 回目、宛先ポッドの場合は 2 回目) 実行して、ソースと宛先のサイドカーのサイドカー ログを取得します。
kubectl logs <pod-name> --namespace <pod-namespace> --container istio-proxy
トラブルシューティング チェックリスト: istioctl の使用
次のトラブルシューティング手順では、さまざまな istioctl
コマンドを実行して、情報を収集し、メッシュ環境をデバッグする方法について説明します。
警告
一部の istioctl
コマンドは、すべてのサイドカーに要求を送信します。
Note
開始する前に、ほとんどの istioctl
コマンドでコントロール プレーンのリビジョンを知る必要があることに注意してください。 この情報は、Istiod デプロイまたはポッドのサフィックスから取得することも、次の istioctl タグ リスト コマンドを実行することもできます。
istioctl tag list
手順 1: Istio が正しくインストールされていることを確認する
正しい Istio アドオンがインストールされていることを確認するには、次の istioctl verify-install コマンドを実行します。
istioctl verify-install --istioNamespace aks-istio-system --revision <tag>
手順 2: 名前空間を分析する
すべての名前空間を分析したり、特定の名前空間を分析したりするには、次の istioctl analyze コマンドを実行します。
istioctl analyze --istioNamespace aks-istio-system \
--revision <tag> \
[--all-namespaces | --namespace <namespace-name>] \
[--failure-threshold {Info | Warning | Error}]
手順 3: プロキシの状態を取得する
プロキシの状態を取得するには、次の istioctl proxy-status コマンドを実行します。
istioctl proxy-status pod/<pod-name> \
--istioNamespace aks-istio-system \
--revision <tag> \
--namespace <pod-namespace>
手順 4: プロキシ構成をダウンロードする
プロキシ構成をダウンロードするには、次の istioctl proxy-config all コマンドを実行します。
istioctl proxy-config all <pod-name> \
--istioNamespace aks-istio-system \
--namespace <pod-namespace> \
--output json
Note
istioctl proxy-config
コマンドのall
バリアントを使用する代わりに、次のいずれかのバリアントを使用できます。
手順 5: インジェクションの状態を確認する
リソースのインジェクション状態を確認するには、次の istioctl experimental check-inject コマンドを実行します。
istioctl experimental check-inject --istioNamespace aks-istio-system \
--namespace <pod-namespace> \
--labels <label-selector> | <pod-name> | deployment/<deployment-name>
手順 6: 完全なバグ レポートを取得する
完全なバグ レポートには、最も詳細な情報が含まれています。 ただし、すべてのポッドが含まれているため、大規模なクラスターでも時間がかかる場合があります。 バグ レポートを特定の名前空間に制限できます。 また、特定のデプロイ、ポッド、またはラベル セレクターにレポートを制限することもできます。
バグ レポートを取得するには、次の istioctl bug-report コマンドを実行します。
istioctl bug-report --istioNamespace aks-istio-system \
[--include <namespace-1>[, <namespace-2>[, ...]]]
トラブルシューティング チェックリスト: その他の問題
手順 1: リソースの使用に関する問題を修正する
Envoy でメモリ消費量が多い場合は、envoy の設定で statistics データ収集を再確認。 istio メトリックをカスタマイズする場合はMeshConfigを使用して、特定のメトリックのカーディナリティ高いメモリ 占有領域を増やすことができることに注意してください。 コンカレンシーなど、MeshConfig の他のフィールドは CPU 使用率に影響し、慎重に構成する必要があります。
既定では、Istio はクラスター内のすべてのサービスに関する情報をすべての Envoy 構成に追加します。 Sidecar では、この追加のスコープを特定の名前空間内のワークロードのみに制限できます。 詳細については、「 この Istio プロキシ サイドカー メモリの落とし穴の概要を参照してください。
たとえば、aks-istio-system
名前空間の次のSidecar
定義では、メッシュ全体のすべてのプロキシの Envoy 構成を、その特定のアプリケーションと同じ名前空間内のaks-istio-system
およびその他のワークロードに制限します。
apiVersion: networking.istio.io/v1alpha3
kind: Sidecar
metadata:
name: sidecar-restrict-egress
namespace: aks-istio-system # Needs to be deployed in the root namespace.
spec:
egress:
- hosts:
- "./*"
- "aks-istio-system/*"
また、MeshConfig で Istio discoverySelectors オプションを使用することもできます。 discoverySelectors
オプションには Kubernetes セレクターの配列が含まれており、Istiod の認識を (クラスター内のすべての名前空間ではなく) 特定の名前空間に制限できます。 詳細については、「 探索セレクターを使用して Istio サービス メッシュの名前空間を構成するを参照してください。
手順 2: トラフィックとセキュリティの構成ミスの問題を修正する
Istio ユーザーが頻繁に発生する一般的なトラフィック管理とセキュリティ構成の問題に対処するには、Istio Web サイトの Traffic 管理の問題 および セキュリティの問題 を参照してください。
サイドカーの挿入、可観測性、アップグレードなど、他の問題に関する説明へのリンクについては、Istio ドキュメント サイトの Common の問題 を参照してください。
手順 3: CoreDNS のオーバーロードを回避する
CoreDNS オーバーロードに関連する問題では、Istio MeshConfig 定義の dnsRefreshRate
フィールドなど、特定の Istio DNS 設定を変更する必要がある場合があります。
手順 4: ポッドとサイドカーの競合状態を修正する
Envoy サイドカーが起動する前にアプリケーション ポッドが起動すると、アプリケーションが応答しなくなるか、再起動される可能性があります。 この問題を回避する方法については、「istio-proxy の準備ができていない場合は、 Pod またはコンテナーがネットワークの問題から始まる」を参照してください。 具体的には、defaultConfig
の下の holdApplicationUntilProxyStarts
MeshConfig フィールドを true
に設定すると、これらの競合状態を防ぐことができます。
手順 5: 送信トラフィックに HTTP プロキシを使用する場合にサービス エントリを構成する
クラスターで送信インターネット アクセスに HTTP プロキシを使用する場合は、サービス エントリを構成する必要があります。 詳細については、「Azure Kubernetes Service での HTTP プロキシのサポート」を参照してください。
エラー メッセージ
次の表に、考えられるエラー メッセージ (アドオンのデプロイ、イングレス ゲートウェイの有効化、アップグレードの実行)、エラーが発生した理由、およびエラーを解決するための推奨事項の一覧を示します。
Error | 理由 | 推奨事項 |
---|---|---|
Azure service mesh is not supported in this region |
この機能は、プレビュー期間中はリージョンでは使用できません (パブリック クラウドでは利用できますが、ソブリン クラウドでは利用できません)。 | サポートされているリージョンの機能については、パブリック ドキュメントを参照してください。 |
Missing service mesh mode: {} |
マネージド クラスター要求のサービス メッシュ プロファイルで mode プロパティを設定していません。 | managedCluster API 要求の ServiceMeshProfile フィールドで、mode プロパティを Istio に設定します。 |
Invalid istio ingress mode: {} |
サービス メッシュ プロファイル内にイングレスを追加するときに、イングレス モードに無効な値を設定します。 | API 要求のイングレス モードを External または Internal に設定します。 |
Too many ingresses for type: {}. Only {} ingress gateway are allowed |
クラスターに作成しようとしたイングレスが多すぎます。 | クラスター上に最大で 1 つの外部イングレスと 1 つの内部イングレスを作成します。 |
Istio profile is missing even though Service Mesh mode is Istio |
Istio プロファイルを指定せずに Istio アドオンを有効にしました。 | Istio アドオンを有効にする場合は、Istio プロファイルと特定のリビジョンのコンポーネント固有 (イングレス ゲートウェイ、プラグイン CA) 情報を指定します。 |
Istio based Azure service mesh is incompatible with feature %s |
Istio アドオンと現在互換性のない別の拡張機能、アドオン、または機能 (Open Service Mesh など) を使用しようとしました。 | Istio アドオンを有効にする前に、最初に他の機能を無効にし、対応するすべてのリソースをクリーンアップします。 |
ServiceMeshProfile is missing required parameters: %s for plugin certificate authority |
プラグイン CA に必要なすべてのパラメーターを指定したわけではありません。 | プラグイン証明機関 (CA) 機能に必要なすべてのパラメーターを指定します (詳細については、「 プラグイン CA 証明書を使用した Istio ベースのサービス メッシュ アドオンの設定」を参照してください)。 |
AzureKeyvaultSecretsProvider addon is required for Azure Service Mesh plugin certificate authority feature |
プラグイン CA を使用する前に、AKS Secrets-Store CSI Driver アドオンを有効にしませんでした。 | プラグイン CA 機能を使用する前に Azure Key Vault を設定します。 |
'KeyVaultId': '%s' is not a valid Azure keyvault resource identifier. Please make sure that the format matches '/subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/' |
無効な AKS リソース ID を使用しました。 | プラグイン CA 機能の有効な Azure Key Vault ID を設定するには、エラー メッセージに記載されている形式を参照してください。 |
Kubernetes version is missing in orchestrator profile |
要求に Kubernetes バージョンがありません。 そのため、バージョン互換性チェックを実行することはできません。 | Istio アドオンのアップグレード操作で Kubernetes バージョンを指定していることを確認します。 |
Service mesh revision %s is not compatible with cluster version %s. To find information about mesh-cluster compatibility, use 'az aks mesh get-upgrades' |
現在の Kubernetes クラスター バージョンと互換性のない Istio アドオン リビジョンを有効にしようとしました。 | az aks mesh get-upgrades Azure CLI コマンドを使用して、現在のクラスターで使用できる Istio アドオンリビジョンを確認します。 |
Kubernetes version %s not supported. Please upgrade to a supported cluster version first. To find compatibility information, use 'az aks mesh get-upgrades' |
サポートされていない Kubernetes バージョンを使用しています。 | サポートされている Kubernetes バージョンにアップグレードします。 |
ServiceMeshProfile revision field must not be empty |
リビジョンを指定せずに Istio アドオンをアップグレードしようとしました。 | リビジョンとその他のすべてのパラメーターを指定します (詳細については、「 Minor リビジョンのアップグレード」を参照してください)。 |
Request exceeds maximum allowed number of revisions (%d) |
既に (%d) リビジョンがインストールされている場合でも、アップグレード操作を実行しようとしました。 |
別のリビジョンにアップグレードする前に アップグレード操作を完了またはロールバックします。 |
Mesh upgrade is in progress. Please complete or roll back the current upgrade before attempting to retrieve versioning and compatibility information |
現在のアップグレード操作を完了またはロールバックする前に、リビジョンと互換性の情報にアクセスしようとしました。 | リビジョンと互換性の情報を取得する前に 現在のアップグレード操作を完了またはロールバックします。 |
関連情報
Istio デバッグに関する一般的なヒントについては、「 Istio 診断ツール」を参照してください。
サードパーティの情報に関する免責事項
この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。