ベアメタルからクラウドへ:OpenStack Neutron 紹介 — OVS セルフサービスネットワーク

Auto Draft

前回の記事では Open vSwitch with Provider Networks のアーキテクチャとパケットフローを紹介しましたが、今回は Open vSwitch with self-service networks について紹介します。

Open vSwitch: セルフサービスネットワーク

アーキテクチャ

上の図は Open vSwitch – Self-service networks におけるアーキテクチャの全体像です。どのコンポーネントが controller node、compute node、または network node 上で動作しているかを確認できます。

この図は、単一の untagged (flat) provider network と単一の self-service network において、使用されるコンポーネントがどのように接続されているかを示しています。この例では Instance と DHCP agent が同一ノードに配置されていますが、実際の運用環境では DHCP agent が他の compute node 上にある場合もあります。

トラフィックフロー

このセクションでは、さまざまな状況下で実際のパケットがアーキテクチャ内をどのように流れるかを紹介します。

アーキテクチャ設定

以下は想定されるアーキテクチャです。VXLAN によって分離された 2 つのセルフサービスネットワークがあり、それぞれに 1 つのインスタンスが存在します。

  • プロバイダーネットワーク 1 (VLAN)
    • VLAN ID 101 (タグ付き)
  • セルフサービスネットワーク 1 (VXLAN)
    • VXLAN ID (VNI) 101
  • セルフサービスネットワーク 2 (VXLAN)
    • VXLAN ID (VNI) 102
  • セルフサービスルーター
    • プロバイダーネットワーク上のゲートウェイ
    • セルフサービスネットワーク 1 のインターフェース
    • セルフサービスネットワーク 2 のインターフェース
  • インスタンス 1
  • インスタンス 2

南北トラフィック 1:固定 IP のインスタンス

固定 IPv4 アドレスを持つインスタンスの場合、ネットワークノード (network node) はセルフサービスネットワークからインターネットなどの外部ネットワークへ向かう南北トラフィックに対して SNAT を実行します。固定 IPv6 アドレスを持つインスタンスの場合、ネットワークノードは通常のルーティングを介してパケットを外部ネットワークに送信します。

  • インスタンスはコンピュートノード 1 上で動作し、セルフサービスネットワーク 1 を使用します
  • インスタンスが外部ネットワークへパケットを送信します

  • インスタンスのネットワークインターフェース (1) は、veth pair (2) を介してパケットを Linux bridge のインスタンスポートに送信します。
  • Linux bridge 上の iptables (3) が、ファイアウォールとコネクショントラッキングを処理します。
  • Linux bridge 上の OVS インターフェース (4) は、veth pair を介してパケットを OVS integration bridge のセキュリティグループインターフェース (5) に送信します。
  • OVS integration bridge は、パケットに内部 VLAN タグを付与します。
  • OVS 統合ブリッジの int-br-provider パッチインターフェース (6) は、パケットを OVS トンネルブリッジの r パッチインターフェース (7) へ送信します。
  • OVS tunnel bridge (8) は、パケットを VNI 101 にカプセル化します。
  • 物理ネットワークインターフェース (9) は、オーバーレイネットワーク (10) を介してパケットをネットワークノードに送信します。

パケットが network node に到達した後:

  • オーバーレイネットワークに対応する物理ネットワークインターフェース (11) は、パケットを OVS tunnel bridge (12) に送信します。
  • OVS tunnel bridge は、VXLAN パケットをデカプセル化し、パケットに内部トンネル ID を付与します。
  • OVS tunnel bridge は、内部トンネル ID を内部 VLAN タグに変換します。
  • OVS tunnel bridge のパッチポート (13) は、パケットを OVS integration bridge のパッチポート (14) に送信します。
  • セルフサービスネットワークの OVS integration bridge ポート (15) は、内部 VLAN タグを削除し、パケットをルーターの名前空間内にあるセルフサービスネットワークインターフェース (16) に送信します。
    • IPv4 の場合、ルーターは SNAT を使用して送信元 IP をルーターの IP に変更した後、プロバイダーネットワーク上のゲートウェイインターフェース (17) を介してパケットをゲートウェイに送信します。
    • IPv6 の場合、ルーターはパケットをネクストホップ IP アドレス(通常はプロバイダーネットワークのゲートウェイ)に送信します。これはプロバイダーネットワーク上のゲートウェイインターフェース (17) を介して行われます。
  • ルーターは、ルーターのプロバイダーネットワークに対応する OVS integration bridge インターフェース (18) にパケットを送信します。
  • OVS integration bridgeはパケットに内部VLANタグを付与します。
  • OVS 統合ブリッジ上の int-br-provider パッチポート (19) は、パケットを OVS プロバイダーブリッジの phy-br-provider パッチポート (20) へ送信します。
  • OVS Provider bridgeは、内部VLANタグを実際のプロバイダーネットワークのVLANタグ101に変換します。
  • プロバイダー物理ネットワークインターフェース (14) は、パケットに VLAN タグ 101 を付与し、物理ネットワーク設備 (15) へ送信します。
  • OVS Provider bridge上のプロバイダーネットワークインターフェース(21)は、パケットを物理ネットワークインターフェース(22)へ送信します。
  • 物理ネットワークインターフェースは、パケットを物理ネットワークインフラ内のスイッチ(23)へ送信します。

その後の部分は、一般的なネットワークの知識と同様です。パケットは物理ネットワーク内のルーターに送られた後、外部へ送信されます。パケットの戻りのフローは、このプロセスを完全に逆にしたものになります。

南北トラフィック 2:Floating IP のインスタンス

固定 IPv4 アドレスを持つインスタンスの場合、ネットワークノード (network node) はセルフサービスネットワークからインターネットなどの外部ネットワークへ向かう南北トラフィックに対して SNAT を実行し、外部ネットワークから戻ってくるトラフィックに対して DNAT を実行します。Floating IP は IPv6 には適用されません。

インスタンスから外網へ向かうパケットフローは例 1 と同じであるため、ここでは詳しく説明しません。唯一の違いは、SNAT の IP がルーターの IP ではなく Floating IP に置き換わっている点です。ここでは、外網から戻ってくるトラフィックについて紹介します。

  • インスタンスはコンピュートノード 1 上で動作し、セルフサービスネットワーク 1 を使用します
  • 外部ネットワークはパケットをインスタンスへ送信します。

外網からのパケットが network node に到達した後:

  • 物理ネットワーク設備 (1) は、パケットをプロバイダー物理ネットワークインターフェース (2) へ送信します。
  • プロバイダー物理ネットワークインターフェース(2)は、VLANタグ101を削除した後、OVS provider bridge上のプロバイダーネットワークポート(3)へ送信します。
  • OVS provider bridgeは、VLANタグ101を内部VLANタグに変換します。
  • OVS プロバイダーブリッジ上の phy-br-provider ポート (4) は、パケットを OVS 統合ブリッジ上の int-br-provider ポート (5) へ送信します。
  • OVS integration bridge上のプロバイダーネットワークポート(6)は、内部VLANタグを削除し、パケットをルーター名前空間内のプロバイダーネットワークインターフェース(7)へ送信します。
    • IPv4の場合、ルーターはDNATを使用して宛先IPをインスタンスのIPに変更した後、セルフサービスインターフェース(8)を介してパケットをセルフサービスネットワークへ送信します。
    • IPv6の場合、ルーターはパケットをネクストホップIPアドレス(通常はセルフサービスネットワークのゲートウェイ)へ送信します。これもセルフサービスインターフェース(8)を経由します。
  • ルーターは、セルフサービスネットワークに対応するOVS integration bridgeのインターフェース(9)へパケットを送信します。
  • OVS integration bridgeはパケットに内部VLANタグを付与します。
  • OVS tunnel bridge は、内部トンネル ID を内部 VLAN タグに変換します。
  • OVS integration bridge上のpatch-tunパッチポート(10)は、パケットをOVS tunnel bridgeのpatch-intパッチポート(11)へ送信します。
  • OVS tunnel bridge(12)は、パケットをVNI 101にカプセル化します。
  • 物理ネットワークインターフェース(13)は、VXLANパケットをオーバーレイネットワーク(14)経由でコンピュートノードへ送信します。

パケットが compute node に到達した後:

  • オーバーレイネットワークに対応する物理ネットワークインターフェース (15) は、パケットを OVS トンネルブリッジ (16) へ送信します。
  • OVS tunnel bridge は、VXLAN パケットをデカプセル化し、パケットに内部トンネル ID を付与します。
  • OVS tunnel bridge は、内部トンネル ID を内部 VLAN タグに変換します。
  • OVS トンネルブリッジの patch-int ポート (17) は、パケットを OVS 統合ブリッジの patch-tun パッチポート (18) へ送信します。
  • OVS integration bridge 將 internal VLAN tag 拿掉
  • OVS integration bridge security group 介面 (19) 將封包送往 Linux bridge 上的 ovs 介面 (20)
  • 在 linux bridge 上 iptables (21) 會處理防火牆跟 connection tracking
  • linux bridge 的 instance port (22) 透過 veth pair 將封包送往Instance 的網路介面 (23)

以上が、Floating IP 使用時の戻りパケットのフローです。

東西トラフィック 1:同一ネットワーク内のインスタンス

  • インスタンス 1 はコンピュートノード 1 上にあり、セルフサービスネットワーク 1 を使用します。
  • インスタンス 2 はコンピュートノード 2 上にあり、セルフサービスネットワーク 1 を使用します。
  • インスタンス 1 がインスタンス 2 へパケットを送信します。

compute node 1 上:

  • インスタンスのネットワークインターフェース (1) は、veth pair (2) を介してパケットを Linux bridge のインスタンスポートに送信します。
  • Linux bridge 上の iptables (3) が、ファイアウォールとコネクショントラッキングを処理します。
  • Linux bridge 上の OVS インターフェース (4) は、veth pair を介してパケットを OVS integration bridge のセキュリティグループインターフェース (5) に送信します。
  • OVS integration bridge は、パケットに内部 VLAN タグを付与します。
  • OVS 統合ブリッジの int-br-provider パッチインターフェース (6) は、パケットを OVS トンネルブリッジの r パッチインターフェース (7) へ送信します。
  • OVS tunnel bridge (8) は、パケットを VNI 101 にカプセル化します。
  • 實體網路介面 (9) 透過 overlay 網路 (10) 將封包送往 compute node 2

compute node 2 に到達した後:

  • オーバーレイネットワークに対応する物理ネットワークインターフェース (11) は、パケットを OVS tunnel bridge (12) に送信します。
  • OVS tunnel bridge は、VXLAN パケットをデカプセル化し、パケットに内部トンネル ID を付与します。
  • OVS tunnel bridge は、内部トンネル ID を内部 VLAN タグに変換します。
  • OVS tunnel bridge patch-int port (13) 將封包送往 OVS integration bridge patch-tun patch port (14).
  • OVS integration bridge 將 internal VLAN tag 拿掉
  • OVS integration bridge security group 介面 (15) 封包送往 Linux bridge 上的 ovs 介面 (16)
  • 在 linux bridge 上 iptables (17) 會處理防火牆跟 connection tracking
  • linux bridge 的 instance port (18) 透過 veth pair 將封包送往 Instance 的網路介面 (19)

東西トラフィック 2:異なるネットワーク間のインスタンス

  • インスタンス 1 はコンピュートノード 1 上にあり、セルフサービスネットワーク 1 を使用します。
  • インスタンス 2 はコンピュートノード 1 上にあり、セルフサービスネットワーク 2 を使用します。
  • インスタンス 1 がインスタンス 2 へパケットを送信します。

compute node 上:

  • インスタンスのネットワークインターフェース (1) は、veth pair (2) を介してパケットを Linux bridge のインスタンスポートに送信します。
  • Linux bridge 上の iptables (3) が、ファイアウォールとコネクショントラッキングを処理します。
  • Linux bridge 上の OVS インターフェース (4) は、veth pair を介してパケットを OVS integration bridge のセキュリティグループインターフェース (5) に送信します。
  • OVS integration bridge は、パケットに内部 VLAN タグを付与します。
  • OVS 統合ブリッジの int-br-provider パッチインターフェース (6) は、パケットを OVS トンネルブリッジの r パッチインターフェース (7) へ送信します。
  • OVS tunnel bridge (8) は、パケットを VNI 101 にカプセル化します。
  • 物理ネットワークインターフェース (9) は、オーバーレイネットワーク (10) を介してパケットをネットワークノードに送信します。

パケットが network node に到達した後:

  • オーバーレイネットワークに対応する物理ネットワークインターフェース (11) は、パケットを OVS tunnel bridge (12) に送信します。
  • OVS tunnel bridge は、VXLAN パケットをデカプセル化し、パケットに内部トンネル ID を付与します。
  • OVS tunnel bridge は、内部トンネル ID を内部 VLAN タグに変換します。
  • OVS tunnel bridge patch port (13) 將封包送往 OVS integration bridge patch-tun patch port (14)
  • Self-service network 1 の OVS 統合ブリッジポート (15) は、内部 VLAN タグを削除し、ルーターの名前空間内にある self-service network 1 インターフェース (16) にパケットを送信します。
  • ルーターはパケットをネクストホップ IP アドレスに送信します。通常、これは self-service network 2 インターフェース (17) を介して self-service network 2 のゲートウェイに送信されます。
  • ルーターは、ルーターの self-service network 2 に対応する OVS 統合ブリッジインターフェース (18) にパケットを送信します。
  • OVS integration bridgeはパケットに内部VLANタグを付与します。
  • OVS 統合ブリッジは、内部 VLAN タグを内部トンネル ID に変換します。
  • OVS 統合ブリッジ上の patch-tun パッチポート (19) は、パケットを OVS トンネルブリッジの patch-int パッチポート (20) に送信します。
  • OVSトンネルブリッジ (21) がパケットをVNI 102にカプセル化します。
  • 物理ネットワークインターフェース (22) がVXLANパケットをオーバーレイネットワーク (23) 経由でコンピュートノードへ送信します。

パケットが compute node に戻った後:

  • オーバーレイネットワークに対応する物理ネットワークインターフェース (24) がパケットをOVSトンネルブリッジ (25) へ送信します。
  • OVS tunnel bridge は、VXLAN パケットをデカプセル化し、パケットに内部トンネル ID を付与します。
  • OVS tunnel bridge は、内部トンネル ID を内部 VLAN タグに変換します。
  • OVSトンネルブリッジのpatch-intパッチポート (26) がパケットをOVSインテグレーションブリッジのpatch-tunパッチポート (27) へ送信します。
  • OVS integration bridge 將 internal VLAN tag 拿掉
  • OVSインテグレーションブリッジのセキュリティグループインターフェース (28) がパケットをLinuxブリッジ上のovsインターフェース (29) へ送信します。
  • 在 linux bridge 上 iptables (30) 會處理防火牆跟 connection tracking
  • linux bridge 的 instance port (31) 透過 veth pair 將封包送往Instance 的網路介面 (32)

以上が、さまざまな状況下における Open vSwitch self-service networks のパケットフローです。

まとめ

本記事では Open vSwitch self-service networks のアーキテクチャとパケットフローを紹介しました。ネットワークパケットの流れを理解することで、ネットワークの疎通が取れない際のデバッグがよりスムーズになるはずです。次回の記事も引き続き Neutron ですが、比較的新しいプラグインである OVN プラグインのアーキテクチャについて紹介します。


著作権表示:特に断りのない限り、本ブログのすべての記事はCC BY-NC-SA 4.0ライセンスの下で提供されています。

コメントを残す