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

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

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 \  1
        --source-dir '/tmp/tcpdump/' \  2
        --image registry.redhat.io/openshift4/network-tools-rhel8:latest \  3
        --node-selector 'node-role.kubernetes.io/worker' \  4
        --host-network=true \  5
        --timeout 30s \  6
        -- \
        tcpdump -i any \  7
        -w /tmp/tcpdump/%Y-%m-%dT%H:%M:%S.pcap -W 1 -G 300
    1
    --dest-dir 引数では、oc adm must-gather の実行時に、クライアントマシンの /tmp/captures と相対パスにあるディレクトリーに、キャプチャーしたパケットを保存することを指定します。書き込み可能なディレクトリーを指定できます。
    2
    tcpdumpoc adm must-gather の起動先のデバッグ Pod で実行される場合に、--source-dir 引数は、パケットが Pod の /tmp/tcpdump ディレクトリーに一時保存するように指定します。
    3
    --image 引数は、tcpdump コマンドが含まれるコンテナーイメージを指定します。
    4
    --node-selector 引数および example 値は、ワーカーノードでパケットキャプチャーを実行するように指定します。別の方法としては、代わりに --node-name 引数を指定して、1 つのノードでパケットキャプチャーを実行できます。--node-selector--node-name 引数の両方を省略すると、パケットキャプチャーはすべてのノードで実行されます。
    5
    パケットがノードのネットワークインターフェイスでキャプチャーされるようにするには、--host-network=true 引数が必要です。
    6
    --timeout 引数および値を指定して、デバッグ Pod を 30 秒間実行します。--timeout 引数と期間を指定しない場合、デバッグ Pod は 10 分実行されます。
    7
    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 引数を指定しなかった場合には、ホスト名のディレクトリーレベルは存在しません。