Container Service for Kubernetes (ACK) は、ポッド間、ACKクラスターとインターネット間、LoadBalancerサービスとインターネット間の接続問題など、一般的なネットワーク問題のトラブルシューティングに役立つネットワーク診断機能を提供します。 このトピックでは、ネットワーク診断機能の仕組みと、この機能を使用して一般的なネットワーク接続の問題をトラブルシューティングする方法について説明します。
ネットワーク診断機能を使用すると、ACKはクラスター内の各ノードでデータ収集プログラムを実行し、診断結果を収集します。 ACKは、システムのバージョン、ロード、Docker、Kubeletなどのシステムログと操作情報から重要なエラーメッセージを収集します。 データ収集プログラムは、ビジネス情報や機密データを収集しません。
前提条件
ACKクラスターが作成されます。 詳細については、「ACK管理クラスターの作成」または「ACK専用クラスターの作成」をご参照ください。
Introduction to network diagnostics
ACKコンソールのネットワーク診断機能を使用すると、障害のある接続の送信元IPアドレスと宛先IPアドレス、宛先ポート、およびプロトコルを指定して、接続をすばやく診断できます。 ネットワーク診断機能を使用するために、コンテナネットワークアーキテクチャ、ネットワークプラグイン、またはシステムカーネルのメンテナンスに関する知識は必要ありません。
ネットワーク診断機能は、オープンソースのKubeSkoopプロジェクトに基づいて開発されています。 KubeSkoopは、さまざまなネットワークプラグインおよびサービスとしてのインフラストラクチャ (IaaS) プロバイダー向けのKubernetesネットワーク診断ツールです。 KubeSkoopを使用すると、Kubernetesクラスターの一般的なネットワークの問題を診断し、拡張バークレーパケットフィルター (eBPF) を使用してカーネルのクリティカルパスを監視および分析できます。 このトピックでは、ネットワーク診断のみを紹介します。 詳細な監視と分析の詳細については、「ACK Net Exporterを使用したネットワークの問題のトラブルシューティング」をご参照ください。
ネットワーク診断機能の仕組み
トポロジの作成: この機能は、指定したネットワーク情報とACKクラスターから収集した情報 (ポッド、ノード、サービス、ネットワークポリシーに関する情報など) に基づいて、自動的にトポロジを作成します。
情報の収集: ネットワーク診断機能は、ランタイム、ネットワークスタック、およびネットワークインフラストラクチャに関する情報を収集します。 この情報は、ネットワークのトラブルシューティングと分析に使用されます。
ネットワークルートのシミュレート: ネットワーク診断機能は、Elastic Compute Service (ECS) インスタンスでコマンドを実行するか、ACKクラスターにコレクターポッドをデプロイして、ネットワークデバイス、sysctl、iptables、IPVSなど、診断されたノードまたはコンテナーのネットワークスタック情報を収集します。 さらに、この機能は、クラウド内のルートテーブル、セキュリティグループ、およびNATゲートウェイに関する情報も収集します。 システムは、収集された情報を予想されるネットワーク構成と比較して、ネットワーク構成問題を特定する。 たとえば、システムはiptablesとroutesをシミュレートし、ネットワークデバイスのステータスをチェックし、クラウド内のルートテーブルとセキュリティグループルールを検証します。
診断結果の取得: ネットワーク診断機能は、実際のネットワーク構成と予想される構成を比較し、ネットワークトポロジの異常なノードとネットワークの問題を強調表示します。
ネットワーク診断機能の操作
制限事項
診断するポッドは実行中の状態である必要があります。
外部アクセス用のLoadBalancerサービスは、レイヤー4クラシックロードバランサー (CLB) インスタンスのみをサポートし、バックエンドポッドの数は10以下である必要があります。
ACKサーバーレスクラスタと仮想ノブは、ネットワーク診断をサポートしていません。
手順
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、診断するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[検査と診断]> [診断] を選択します。
[診断] ページで、[ネットワーク診断] をクリックします。
[ネットワーク] パネルで、[送信元アドレス] 、[送信先アドレス] 、[送信先ポート] 、[プロトコル] を指定し、警告を読み、[知って同意する] を選択し、[診断の作成] をクリックします。
パラメーターの詳細については、「ネットワーク共通問題診断のパラメーター」をご参照ください。
[診断結果] ページで、診断結果を表示できます。 [パケットパス] セクションには、診断されたすべてのノードが表示されます。
異常なノードが強調表示されます。 一般的な診断結果の詳細については、「一般的な診断結果とソリューション」をご参照ください。
一般的なネットワーク問題診断のパラメータ
シナリオ1: ポッドとノード間のネットワークの診断
ネットワーク診断機能を使用して、ポッド間またはポッドとノード間のネットワークを診断できます。 下表に、各パラメーターを説明します。
パラメーター | 説明 |
ソースアドレス | ポッドまたはノードのIPアドレス。 |
宛先アドレス | 別のポッドまたはノードのIPアドレス。 |
宛先ポート | 診断されるポート。 |
プロトコル | 診断されるプロトコル。 |
シナリオ2: ポッドとサービス間、またはノードとサービス間のネットワークの診断
サービスのクラスターIPを指定して、ノードまたはポッドがサービスにアクセスできるかどうかを確認し、サービスのネットワーク構成を確認できます。 下表に、各パラメーターを説明します。
パラメーター | 説明 |
ソースアドレス | ポッドまたはノードのIPアドレス。 |
宛先アドレス | サービスのクラスターIP。 |
宛先ポート | 診断されるポート。 |
プロトコル | 診断されるプロトコル。 |
シナリオ3: DNS解決の診断
宛先アドレスがドメイン名の場合、送信元アドレスと宛先アドレス間の接続を確認するだけでなく、クラスター内のDNSサービスも確認する必要があります。 ネットワーク診断機能を使用して、ポッドがkube-system名前空間のkube-dnsサービスにアクセスできるかどうかを確認できます。
次のコマンドを実行して、kube-system名前空間のkube-dnsサービスのクラスターIPを照会します。
kubectl get svc -n kube-system kube-dns
期待される出力:
kube-dns ClusterIP 172.16.XX.XX <none> 53/UDP,53/TCP,9153/TCP 6d
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
出力は、kube-dns ServiceのクラスターIPが172.16.XX.XXであることを示しています。 kube-dns ServiceのクラスターIPを宛先アドレスとして指定し、その他のパラメーターを設定します。
パラメーター | 説明 |
ソースアドレス | ポッドまたはノードのIPアドレス。 |
宛先アドレス | kube-dnsサービスのクラスターIP。 |
宛先ポート | 53 |
プロトコル | udp |
シナリオ4: ポッドまたはノードとインターネット間のネットワークの診断
ネットワーク診断機能を使用して、ポッドまたはノード間のネットワークとパブリックIPアドレスを診断できます。 宛先アドレスがドメイン名の場合、ドメイン名にマップされているパブリックIPアドレスを取得する必要があります。 下表に、各パラメーターを説明します。
パラメーター | 説明 |
ソースアドレス | ポッドまたはノードのIPアドレス。 |
宛先アドレス | パブリックIPアドレス。 |
宛先ポート | 診断されるポート。 |
プロトコル | 診断されるプロトコル。 |
シナリオ5: インターネットとLoadBalancerサービス間のネットワークの診断
LoadBalancerサービスへの外部アクセスが失敗した場合は、パブリックIPアドレスを送信元アドレスとして指定し、LoadBalancerサービスの外部IPアドレスを送信先アドレスとして指定して接続を診断できます。 下表に、各パラメーターを説明します。
パラメーター | 説明 |
ソースアドレス | パブリックIPアドレス。 |
宛先アドレス | LoadBalancerサービスの外部IPアドレス。 |
宛先ポート | 診断されるポート。 |
プロトコル | 診断されるプロトコル。 |
一般的な診断結果とソリューション
診断結果 | の説明 | ソリューション |
ポッドコンテナー... 準備ができていません | ポッド内のコンテナの準備ができていません。 | ポッドのヘルスステータスを確認し、ポッドを修正します。 |
ネットワークポリシー... からのパケットを拒否します... | パケットはネットワークポリシーによってブロックされます。 | ネットワークポリシーを変更します。 |
プロセスのリスニングはありません... | コンテナまたはノード上のどのリスナープロセスも、現在のプロトコルを使用してポートをリッスンしません。 | リスナープロセスが正常に実行されているかどうかを確認し、ポートやプロトコルなどのネットワーク診断用のパラメーターを確認します。 |
ホストへのルートがありません。../invalid route... パケット用... | ルートが見つからないか、ルートが目的の目的地を指していません。 | ネットワークプラグインが正常に動作するかどうかを確認します。 |
... 同じセキュリティroupを持っていない | 2つのECSインスタンスは異なるセキュリティグループを使用します。 パケットは廃棄される。 | 同じセキュリティグループを使用するようにECSインスタンスを設定します。 |
セキュリティグループ... パケットを許可しません... | パケットは、ECSインスタンスのセキュリティグループによってブロックされます。 | 指定されたIPアドレスからのパケットを受け入れるようにセキュリティグループルールを変更します。 |
| ルートテーブルには、宛先アドレスを指すルートは含まれていません。 | 宛先アドレスがパブリックIPアドレスの場合は、インターネットNATゲートウェイの設定を確認してください。 |
| ルートテーブル内のルートは、所望の宛先アドレスを指していない。 | 宛先アドレスがパブリックIPアドレスの場合は、インターネットNATゲートウェイの設定を確認してください。 |
nat gatewayにsnatエントリはありません... | 目的のSNATエントリがインターネットNATゲートウェイに見つかりません。 | インターネットNATゲートウェイのSNAT設定を確認します。 |
バックエンド... ポートの健康状態... 、「正常」ではない | CLBインスタンスの一部のバックエンドポッドがヘルスチェックに合格しません。 | 目的のバックエンドポッドがCLBインスタンスに関連付けられているかどうか、および関連付けられているバックエンドポッドで実行されているアプリケーションが正常かどうかを確認します。 |
リスナーポートが見つかりません... slbのため... | リスニングポートがCLBインスタンスにありません。 | LoadBalancerサービスの設定と、ポートやプロトコルなどのネットワーク診断用のパラメーターを確認します。 |
status of loadbalancer for... ポート... 「走っていない」 | CLBインスタンスのリスナーが [実行中] 状態ではありません。 | リスニングポートが正常かどうかを確認します。 |
サービス... 有効なエンドポイントがない | サービスにはエンドポイントがありません。 | サービスのラベルセレクターが期待どおりに機能するかどうか、サービスのエンドポイントが存在するかどうか、エンドポイントが正常かどうかを確認します。 LoadBalancerサービスへの内部アクセスの詳細については、「クラスター内からSLBインスタンスにアクセスできない」をご参照ください。 |