5.2. ネットワークエラーのデバッグ
ネットワークでエラーが発生したにも関わらず (例: インスタンスを接続できないなど)、OpenStack コマンドを発行してもエラーが報告されなかったり、neutron のログにも記載されない場合には、OVS ノードを検査してネットワークトラフィックと OpenFlow のフローを確認すると役立つ場合があります。
-
ネットワークエラーが発生したノードに
superuserとしてログインします。 br-int スイッチに関する情報を表示します。
ovs-ofctl -O openflow13 show br-int
# ovs-ofctl -O openflow13 show br-intCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力を確認します。以下の例と同じような内容が表示されるはずです。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow br-int スイッチの統計を一覧表示します。
ovs-ofctl -O openflow13 dump-ports br-int
# ovs-ofctl -O openflow13 dump-ports br-intCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力を確認します。以下の例と同じような内容が表示されるはずです。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
補足情報
- ステップ 3 では、この OVS ノードに 3 つのポートがある点に注意してください。1 番目のポートはブリッジ br-ex に送信されるパッチポートで、このシナリオでは、外部ネットワークの接続ポートとして使用されます。2 番目のポートは tap ポートで、DHCP エージェントインスタンスに接続されます。これは、ホストがコントローラーなのでわかります。コントローラーではなく、コンピュートロール上の場合には、インスタンスとなります。3 番目のポートは、テナントトラフィック用に作成された VXLAN トンネルポートです。
- 各ポートの用途を理解したら、ポートの統計を調べて、ポートがトラフィックの送受信を行っていることを確認します (ステップ 4 を参照)。
- ステップ 5 の出力から、各ポートがパケットを受信 (rx pkts) および送信 (tx pkts) していることを確認できます。
5.2.1. OpenFlow のフローを使用した高度なデバッグ リンクのコピーリンクがクリップボードにコピーされました!
OpenFlow に精通している上級ユーザーの場合は、スイッチ上のフローを確認して、トラフィックがドロップする場所を検出することができます。
フローを一覧表示してヒットしたパケット数を確認するには、以下のコマンドを入力します。
ovs-ofctl -O openflow13 dump-flows br-int
# ovs-ofctl -O openflow13 dump-flows br-intCopy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドの出力を確認して、必要な情報を取得します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
この出力は長いため途中から省略されています。
5.2.2. OpenFlow でのパケットのトラバース リンクのコピーリンクがクリップボードにコピーされました!
理解すべき重要な点として、パケットに対して実行されるネットワーク機能は複数の異なる OpenFlow テーブルに分かれ、パケットはそれらのテーブルをゼロから順番に通過していくことが挙げられます。受信パケットはテーブル 0 に着信し、次に OpenFlow のパイプライン を経て進み、ポートから送信されて OpenDaylight のコントローラーに到達するか、ドロップされます。パケットは、処理の必要があるネットワーク機能に応じて、1 つまたは複数のテーブルをスキップする場合があります。テーブルの全体図と、各テーブルのネットワーク機能への対応方法について以下に示します。
図5.1 OpenDaylight NetVirt OpenFlow の パイプライン