Istio サービス メッシュ アドオンの一般的なトラブルシューティング

この記事では、Microsoft Azure Kubernetes Service (AKS) の Istio サービス メッシュ アドオンに関連する問題をトラブルシューティングするための一般的な戦略 (、istioctl、、およびその他のツールを使用kubectl) について説明します。 この記事では、考えられるエラー メッセージ、エラー発生の理由、およびこれらのエラーを解決するための推奨事項の一覧も示します。

前提条件

トラブルシューティング チェックリスト: 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 ポッドを直接削除すると、ポッドが自動的に再作成され、再デプロイされます。 そのため、ポッドを削除することは、ポッドを再起動するための別の方法です。

注:

または、次の 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 回 (ソース ポッドの場合は初めて、宛先ポッドの場合は 2 回目) を実行して、ソースと宛先のサイドカーのサイドカー ログを取得します。

kubectl logs <pod-name> --namespace <pod-namespace> --container istio-proxy

トラブルシューティング チェックリスト: istioctl の使用

次のトラブルシューティング手順では、さまざまな istioctl コマンドを実行して、情報を収集し、メッシュ環境をデバッグする方法について説明します。

警告

一部 istioctl のコマンドは、すべてのサイドカーに要求を送信します。

注:

開始する前に、ほとんどの 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

注:

コマンドのバリアントistioctl proxy-configを使用するall代わりに、次のいずれかのバリアントを使用できます。

手順 5: インジェクションの状態を確認する

リソースのインジェクション状態をチェックするには、次の istioctl 試験的な チェック-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 設定をダブルチェックします。 MeshConfig を使用して Istio メトリックをカスタマイズする場合は、特定のメトリックのカーディナリティが高くなる可能性があるため、メモリ占有領域が高くなることに注意してください。 コンカレンシーなど、MeshConfig の他のフィールドは CPU 使用率に影響し、慎重に構成する必要があります。

既定では、Istio はすべての Envoy 構成にクラスター内のすべてのサービスに関する情報を追加します。 サイドカーでは、この追加のスコープを特定の名前空間内のワークロードのみに制限できます。 詳細については、「 この Istio プロキシ サイドカー メモリの落とし穴に注意する」を参照してください。

たとえば、名前空間のaks-istio-systemSidecarの定義では、メッシュaks-istio-system全体のすべてのプロキシの Envoy 構成が、その特定のアプリケーションと同じ名前空間内のその他のワークロードに制限されます。

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 サイトの トラフィック管理の問題セキュリティの問題 に関するページを参照してください。

サイドカーの挿入、監視可能性、アップグレードなど、その他の問題に関する説明へのリンクについては、Istio ドキュメント サイトの 一般的な問題 に関するページを参照してください。

手順 3: CoreDNS オーバーロードを回避する

CoreDNS オーバーロードに関連する問題では、Istio MeshConfig 定義のフィールドなど dnsRefreshRate 、特定の Istio DNS 設定を変更することが必要になる場合があります。

手順 4: ポッドとサイドカーの競合状態を修正する

Envoy サイドカーが起動する前にアプリケーション ポッドが起動すると、アプリケーションが応答しなくなるか、再起動する可能性があります。 この問題を回避する方法については、「 istio-proxy の準備ができていない場合は、ポッドまたはコンテナーがネットワークの問題から始まる」を参照してください。 具体的には、MeshConfig フィールドdefaultConfigholdApplicationUntilProxyStartstrue設定すると、これらの競合状態を防ぐことができます。

エラー メッセージ

次の表に、考えられるエラー メッセージ (アドオンのデプロイ、イングレス ゲートウェイの有効化、アップグレードの実行)、エラーが発生した理由、エラーを解決するための推奨事項の一覧を示します。

Error 理由 推奨事項
Azure service mesh is not supported in this region この機能はプレビュー中にリージョンで使用できません (パブリック クラウドでは使用できますが、ソブリン クラウドでは使用できません)。 サポートされているリージョンの機能に関するパブリック ドキュメントを参照してください。
Missing service mesh mode: {} マネージド クラスター要求のサービス メッシュ プロファイルで mode プロパティを設定しませんでした。 API 要求の ServiceMeshProfile フィールドで managedCluster 、 プロパティを modeIstio設定します。
Invalid istio ingress mode: {} サービス メッシュ プロファイル内にイングレスを追加するときに、イングレス モードの無効な値を設定します。 API 要求のイングレス モードを または に External 設定します Internal
Too many ingresses for type: {}. Only {} ingress gateway are allowed クラスターでイングレスを作成しようとしました。 Create、最大で 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 アドオンをアップグレードしようとしました。 リビジョンとその他のすべてのパラメーターを指定します (詳細については、「 マイナー リビジョンのアップグレード」を参照してください)。
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 現在のアップグレード操作を完了またはロールバックする前に、リビジョンと互換性の情報にアクセスしようとしました。 リビジョンと互換性の情報を取得する前に、現在のアップグレード操作を完了またはロールバックします。

関連情報

サードパーティの情報に関する免責事項

この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。