Istio CNIプラグインのトラブルシューティング

このページでは、Istio CNIプラグインの問題のトラブルシューティング方法について説明します。これを読む前に、CNIのインストールと操作ガイドをお読みください。

ログ

Istio CNIプラグインログには、プラグインが`PodSpec`に基づいてアプリケーションPodトラフィックのリダイレクトをどのように構成するかについての情報が含まれています。

プラグインはコンテナランタイムプロセスの空間で実行されるため、`kubelet`ログにCNIログエントリが表示されます。デバッグを容易にするために、CNIプラグインはログを`istio-cni-node` DaemonSetにも送信します。

CNIプラグインのデフォルトのログレベルは`info`です。より詳細なログ出力を得るには、`values.cni.logLevel`インストールオプションを編集してCNI DaemonSet Podを再起動することでレベルを変更できます。

Istio CNI DaemonSet Podログには、CNIプラグインのインストールと競合状態の修復に関する情報も含まれています。

監視

CNI DaemonSetはメトリクスを生成し、これを使用してCNIのインストール、準備状況、競合状態の軽減を監視できます。Prometheusスクレーピングアノテーション(`prometheus.io/port`、`prometheus.io/path`)は、デフォルトで`istio-cni-node` DaemonSet Podに追加されます。標準的なPrometheus設定を介して生成されたメトリクスを収集できます。

DaemonSetの準備状況

CNI DaemonSetの準備状況は、Istio CNIプラグインが正しくインストールおよび構成されていることを示します。Istio CNI DaemonSetの準備ができていない場合、何か問題が発生していることを示唆しています。診断するには、`istio-cni-node` DaemonSetログを確認してください。`istio_cni_install_ready`メトリクスを使用して、CNIインストールの準備状況を追跡することもできます。

競合状態の修復

デフォルトでは、Istio CNI DaemonSetには競合状態の軽減が有効になっており、CNIプラグインの準備が整う前に開始されたPodを削除します。削除されたPodを理解するには、次のようなログ行を探します。

2021-07-21T08:32:17.362512Z     info   Deleting broken pod: service-graph00/svc00-0v1-95b5885bf-zhbzm

`istio_cni_repair_pods_repaired_total`メトリクスを使用して、修復されたPodを追跡することもできます。

Podの起動失敗の診断

CNIプラグインに関するよくある問題として、コンテナネットワークの設定失敗によりPodが起動に失敗することがあります。通常、失敗理由はPodイベントに書き込まれ、Podの説明を通じて確認できます。

$ kubectl describe pod POD_NAME -n POD_NAMESPACE

Podがinitエラーを繰り返し発生させる場合、initコンテナ`istio-validation`のログで、以下の様な「接続拒否」エラーを確認してください。

$ kubectl logs POD_NAME -n POD_NAMESPACE -c istio-validation
...
2021-07-20T05:30:17.111930Z     error   Error connecting to 127.0.0.6:15002: dial tcp 127.0.0.1:0->127.0.0.6:15002: connect: connection refused
2021-07-20T05:30:18.112503Z     error   Error connecting to 127.0.0.6:15002: dial tcp 127.0.0.1:0->127.0.0.6:15002: connect: connection refused
...
2021-07-20T05:30:22.111676Z     error   validation timeout

`istio-validation` initコンテナは、トラフィックリダイレクトターゲットの送受信ポートでリスンするローカルダミーサーバーを設定し、テストトラフィックがダミーサーバーにリダイレクトできるかどうかを確認します。CNIプラグインによってPodトラフィックリダイレクトが正しく設定されていない場合、`istio-validation` initコンテナはトラフィックバイパスを防ぐためにPodの起動をブロックします。エラーや予期しないネットワーク設定の動作があったかどうかを確認するには、Pod IDで`istio-cni-node`を検索してください。

CNIプラグインの誤動作のもう一つの症状として、アプリケーションPodが起動時に継続的にevicted(削除)されることが挙げられます。これは通常、プラグインが正しくインストールされていないため、Podトラフィックリダイレクトを設定できないことが原因です。CNIの競合状態修復ロジックは、競合状態によりPodが破損しているとみなし、Podを継続的にevictedします。この問題が発生した場合は、CNI DaemonSetログで、プラグインが正しくインストールできなかった理由に関する情報を確認してください。

この情報は役に立ちましたか?
改善点に関するご提案はありますか?

ご意見ありがとうございます!