5.9. ホストのネットワークトレースの収集

ネットワーク関連の問題のトラブルシューティングは、ネットワーク通信を追跡して複数のノードで同時にパケットをキャプチャーすることで簡素化されます。

oc adm must-gather コマンドおよび registry.redhat.io/openshift4/network-tools-rhel8 コンテナーイメージの組み合わせを使用して、ノードからパケットキャプチャーを収集できます。パケットキャプチャーの分析は、ネットワーク通信の問題のトラブルシューティングに役立ちます。

oc adm must-gather コマンドは、特定のノードの Pod で tcpdump コマンドの実行に使用されます。tcpdump コマンドは、Pod でキャプチャーされたパケットを記録します。tcpdump コマンドを終了すると、oc adm must-gather コマンドは、Pod からクライアントマシンにキャプチャーされたパケットが含まれるファイルを転送します。

ヒント

以下の手順で使用するコマンド例は、tcpdump コマンドを使用してパケットキャプチャーを実行する方法を示しています。ただし、--image 引数で指定したコンテナーイメージでコマンドを実行すると、複数のノードから同時にトラブルシューティング情報を収集できます。

前提条件

  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 以下のコマンドを実行して、一部のノードでホストネットワークからパケットキャプチャーを実行します。

    $ oc adm must-gather \
        --dest-dir /tmp/captures \  <.>
        --source-dir '/tmp/tcpdump/' \  <.>
        --image registry.redhat.io/openshift4/network-tools-rhel8:latest \  <.>
        --node-selector 'node-role.kubernetes.io/worker' \  <.>
        --host-network=true \  <.>
        --timeout 30s \  <.>
        -- \
        tcpdump -i any \  <.>
        -w /tmp/tcpdump/%Y-%m-%dT%H:%M:%S.pcap -W 1 -G 300

    <.> --dest-dir 引数では、oc adm must-gather の実行時に、クライアントマシンの /tmp/captures と相対パスにあるディレクトリーに、キャプチャーしたパケットを保存することを指定します。書き込み可能な任意のディレクトリーを指定できます。<.> oc adm must-gather が開始するデバッグ Pod で tcpdump が実行される場合に、--source-dir 引数は、パケットキャプチャーが Pod の /tmp/tcpdump ディレクトリーに一時的に保存されることを指定します。<.> --image 引数は、tcpdump コマンドを含むコンテナーイメージを指定します。<.> --node-selector 引数とサンプル値は、ワーカーノードでパケットキャプチャーを実行するように指定します。別の方法としては、代わりに --node-name 引数を指定して、1 つのノードでパケットキャプチャーを実行できます。--node-selector--node-name 引数の両方を省略すると、すべてのノードでパケットキャプチャーが実行されます。<.> ノードのネットワークインターフェイスでパケットキャプチャーが実行されるように、--host-network=true 引数が必要です。<.> --timeout 引数と値は、デバッグ Pod を 30 秒間実行するように指定します。--timeout 引数と期間を指定しない場合、デバッグ Pod は 10 分間実行されます。<.> tcpdump コマンドの -i any 引数は、すべてのネットワークインターフェイスでパケットをキャプチャーするように指定します。また、ネットワークインターフェイス名を指定することもできます。

  2. ネットワークトレースがパケットをキャプチャーしている間に、ネットワーク通信の問題を発生させる、Web アプリケーションにアクセスするなど、特定のアクションを実行します。
  3. oc adm must-gather で Pod からクライアントマシンに転送したパケットキャプチャーファイルを確認します。

    tmp/captures
    ├── event-filter.html
    ├── ip-10-0-192-217-ec2-internal  1
    │   └── registry-redhat-io-openshift4-network-tools-rhel8-sha256-bca...
    │       └── 2022-01-13T19:31:31.pcap
    ├── ip-10-0-201-178-ec2-internal  2
    │   └── registry-redhat-io-openshift4-network-tools-rhel8-sha256-bca...
    │       └── 2022-01-13T19:31:30.pcap
    ├── ip-...
    └── timestamp
    1 2
    パケットのキャプチャーは、ホスト名、コンテナー、ファイル名を識別するディレクトリーに保存されます。--node-selector 引数を指定しなかった場合には、ホスト名のディレクトリーレベルは存在しません。