ACK クラスターでネットワーク接続に障害が発生した場合、障害のあるホップを特定するには、通常、コンテナネットワーク、ネットワークプラグイン、およびカーネルレベルルーティングに関する深い知識が必要です。ネットワーク診断は、この障壁を取り除きます。送信元アドレス、送信先アドレス、ポート、およびプロトコルを指定すると、ACK は自動的にパケットパスをトレースし、各ホップの構成エラーをチェックし、問題と推奨される修正をハイライト表示します。
診断を実行すると、ACK は各ノードにデータ収集プログラムをデプロイし、システムレベルの情報 (システムバージョン、負荷、Docker、Kubelet) を収集します。このプログラムは、ビジネス情報や機密データを収集しません。
サポートされているシナリオ
ネットワーク診断は、次のシナリオをサポートしています。状況を特定し、シナリオ別パラメーターで対応するパラメーターガイダンスに従ってください。
Pod 間または Pod とノード間の接続性 — Pod 間、または Pod とノード間の直接的なネットワークパスを診断します。
Pod またはノードから Service への接続 — Pod またはノードが Kubernetes Service に到達できることを確認し、Service のネットワーク構成をチェックします。
DNS 解決 — Pod が
kube-system名前空間の kube-dns Service に到達できるか確認します。Pod またはノードからインターネットへの接続 — Pod またはノードからパブリック IP アドレスへのアウトバウンド接続を診断します。
インターネットから LoadBalancer Service への接続 — クラシックロードバランサー (CLB) インスタンスを介して公開されている LoadBalancer Service へのインバウンド接続を診断します。
仕組み
ネットワーク診断は、送信元と送信先間のパケットパスをトレースし、各ホップの構成エラーをチェックします。診断は次の 4 つのステージで実行されます。

トポロジーの構築 — この機能は、Pod、ノード、Service、ネットワークポリシーなど、クラスターからの情報を使用してネットワークパスをマッピングします。
ランタイム状態の収集 — 関連するノードとコンテナからネットワークスタックおよびインフラストラクチャ情報を収集します。
ルートのシミュレーション — Elastic Compute Service (ECS) インスタンスでコマンドを実行するか、コレクター Pod をデプロイして、ネットワークスタックの詳細 (ネットワークデバイス、sysctl、iptables、IPVS) およびクラウドレイヤー情報 (ルートテーブル、セキュリティグループ、NAT ゲートウェイ) を収集します。その後、予期されるパケットフローをシミュレートし、実際の構成と比較します。
異常の表面化 — 異常なホップは、問題の説明と推奨される修正とともに、トポロジービューでハイライト表示されます。
ネットワーク診断は、KubeSkoopに基づいて構築されています。KubeSkoopは、複数のネットワークプラグインおよびサービスとしてのインフラストラクチャ (IaaS) プロバイダーに対応するオープンソースのKubernetes ネットワーキング診断ツールであり、拡張 Berkeley パケットフィルター (eBPF) を使用してカーネルレベルのパケットパスをモニターします。診断を超えた詳細なモニタリングおよび分析については、「ACK Net Exporter を使用したネットワーク問題のトラブルシューティング」をご参照ください。
使用制限
診断対象の Pod は Running 状態である必要があります。
インターネットから LoadBalancer へのシナリオでは、レイヤー 4 CLB インスタンスのみがサポートされており、LoadBalancer Service のバックエンド Pod は 10 個以下である必要があります。
サーバーレス Kubernetes クラスターおよび仮想ノードは、ネットワーク診断をサポートしていません。
診断の実行
始める前に: ACK マネージドクラスター が必要です。
「ACK コンソール」にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
「[クラスター]」ページで、診断するクラスターの名前をクリックします。左側のナビゲーションウィンドウで、[検査と診断] > [診断] を選択します。
[診断]ページで、[ネットワーク診断]をクリックします。[ネットワーク診断]ページで、[診断]をクリックします。
[ネットワーク] パネルで、[送信元アドレス]、[送信先アドレス]、[送信先ポート]、および[プロトコル] を入力します。パラメーター値については、「シナリオ別のパラメーター」をご参照ください。警告を読み、[同意する] を選択し、[診断の作成] をクリックします。

「[診断結果]」ページで結果を確認します。「[パケット パス]」セクションには、すべての診断済みホップが表示されます。異常なホップはハイライト表示されます。結果の解釈方法については、「一般的な診断結果とソリューション」をご参照ください。

シナリオ別パラメーター
Pod 間または Pod とノード間の接続性
| パラメーター | 値 |
|---|---|
| 送信元アドレス | Pod またはノードの IP アドレス |
| 送信先アドレス | 別の Pod またはノードの IP アドレス |
| 送信先ポート | 診断するポート |
| プロトコル | 診断するプロトコル |
Pod またはノードから Service への接続
Pod またはノードが Service に到達できることを確認し、Service のネットワーク構成を検証するには、Service のクラスター IP を指定します。
| パラメーター | 値 |
|---|---|
| 送信元アドレス | Pod またはノードの IP アドレス |
| 送信先アドレス | Service のクラスター IP |
| 送信先ポート | 診断するポート |
| プロトコル | 診断するプロトコル |
DNS 解決
送信先がドメイン名の場合、Pod が kube-dns Service に到達できることも検証する必要があります。次のコマンドを実行して、kube-dns のクラスター IP を取得します。
kubectl get svc -n kube-system kube-dns期待される出力:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 172.16.XX.XX <none> 53/UDP,53/TCP,9153/TCP 6dCLUSTER-IP 列に表示されているクラスター IP を送信先アドレスとして使用します。
| パラメーター | 値 |
|---|---|
| 送信元アドレス | Pod またはノードの IP アドレス |
| 送信先アドレス | kube-dns のクラスター IP (例: 172.16.XX.XX) |
| 送信先ポート | 53 |
| プロトコル | udp |
Pod またはノードからインターネットへの接続
送信先がドメイン名の場合は、まずパブリック IP アドレスに解決してください。
| パラメーター | 値 |
|---|---|
| 送信元アドレス | Pod またはノードの IP アドレス |
| 送信先アドレス | パブリック IP アドレス |
| 送信先ポート | 診断するポート |
| プロトコル | 診断するプロトコル |
インターネットから LoadBalancer Service への接続
外部トラフィックが LoadBalancer Service に到達できない場合は、送信元アドレスとしてパブリック IP アドレスを、送信先アドレスとして LoadBalancer Service の外部 IP アドレスを指定します。
| パラメーター | 値 |
|---|---|
| 送信元アドレス | パブリック IP アドレス |
| 送信先アドレス | LoadBalancer Service の外部 IP アドレス |
| 宛先ポート | 診断するポート |
| プロトコル | 診断するプロトコル |
一般的な診断結果とソリューション
| 診断結果 | 説明 | ソリューション |
|---|---|---|
pod container ... is not ready | Pod 内のコンテナが準備できていません。 | Pod のヘルスステータスを確認し、Pod を修正してください。 |
network policy ... deny the packet from ... | ネットワークポリシーがパケットをブロックしています。 | ネットワークポリシーを変更して、トラフィックを許可してください。 |
no process listening on ... | 指定されたプロトコルを使用して、指定されたポートでリッスンしているプロセスがありません。 | リスナープロセスが実行中であることを確認してください。診断パラメーターのポートとプロトコルを検証してください。 |
no route to host .../invalid route ... for packet ... | ルートが存在しないか、ルートが予期された送信先を指していません。 | ネットワークプラグインが正しく機能しているか確認してください。 |
... do not have same security group | 2 つの ECS インスタンスが異なるセキュリティグループに属しており、パケットがドロップされる可能性があります。 | ECS インスタンスが同じセキュリティグループを使用するように構成してください。 |
security group ... not allow packet ... | ECS インスタンス上のセキュリティグループがパケットをブロックしています。 | セキュリティグループルールを変更して、送信元 IP アドレスからのパケットを許可してください。 |
no route entry for destination ip ... / no next hop for destination ip ... | ルートテーブルに送信先へのルートがありません。 | 送信先がパブリック IP アドレスの場合は、インターネット NAT ゲートウェイの構成を確認してください。 |
error route next hop for destination ip ... / expect next hop for destination ip ... | ルートテーブル内のルートが予期された送信先を指していません。 | 送信先がパブリック IP アドレスの場合は、インターネット NAT ゲートウェイの構成を確認してください。 |
no snat entry on nat gateway ... | インターネット NAT ゲートウェイに SNAT エントリが見つかりませんでした。 | インターネット NAT ゲートウェイの SNAT 構成を確認してください。 |
backend ... health status for port ..., not "normal" | 1 つ以上のバックエンド Pod が CLB インスタンスでのヘルスチェックに失敗しました。 | バックエンド Pod が CLB インスタンスに正しく関連付けられていること、およびそれらの Pod 内のアプリケーションが正常であることを確認してください。 |
cannot find listener port ... for slb ... | 指定されたポートに CLB インスタンスでリスナーがありません。 | LoadBalancer Service の構成を確認し、診断パラメーターのポートとプロトコルを検証してください。 |
status of loadbalancer for ... port ... not "running" | CLB リスナーが実行中状態ではありません。 | リスニングポートが正常であるか確認してください。 |
service ... has no valid endpoint | Service にエンドポイントがありません。 | Service のラベルセレクターを確認し、エンドポイントが存在すること、およびエンドポイントが正常であることを確認してください。クラスター内から LoadBalancer Service にアクセスする際の問題については、「CLB インスタンスにクラスター内からアクセスできない」をご参照ください。 |
次のステップ
「ACK Net Exporter を使用してネットワークの問題をトラブルシューティングする」 — eBPF を使用してカーネルレベルのパケットパスをモニターおよび分析し、より詳細なネットワーク可視化を実現します。