TungstenFabric の deployment pattern

TungstenFabric には多数の機能があるため、どのケースでどの機能を使えるのか、をまとめてみている。

1. openstack, kubernetes を使うケース

この場合、vm, container へのアクセスは floating-ip 経由になるため、もっとも簡単な構成は、gatewayless の仮想ネットワークから、floating-ip を取得する使い方となる。
ルーター/スイッチは、ipv4 の bgp が使えればよいため、インオペは問題になりにくい、ものと思われる
http://aaabbb-200904.hatenablog.jp/entry/2019/02/03/195348

この場合も、内部の通信は、overlay で実施できるため、calico と ml2 を合わせたような動作が可能になる。

2. oVirt 等と組み合わせて使うケース

1 と違い、全てのサブネットを external にするようなケースを想定する。
※ このケースは、TungstenFabric を使わず、hypervisor からは vlan でパケットを出すような設定でも構成可能だが、vRouter の distributed firewall を使いたい場合、等を考え、このケースも考慮している

この場合、機材が EVPN/VXLAN に対応しているかどうか、で動作が変わってくる。

2-1. 機材がEVPN/VXLANに対応している場合

この場合は、vRouterとcore-switch でEVPN/VXLANを設定し、core-switch で vxlan routing を行う構成が基本となる。
https://github.com/Juniper/contrail-specs/blob/master/5.1/cfm-erb-unicast-crb-multicast-roles.md

この場合、vm 間通信は、通常と変わらず vRouter間のオーバーレイで実施される。
vm から baremetal への疎通は、inter-vxlan は spine を通じて、vxlan-routing され、intra-vxlan は、leaf と vRouter が vtep として動作する動きとなる。intra-vxlan については、BUM等もオーバーレイを通じて、replicate されるため、SDN の機能を使用しつつ、既存に近い構成が可能となる。

2-2. 機材がEVPN/VXLANに対応していない場合

この場合、vRouter と core-switch (vlan間ルーティングを行う機材) とのやりとりは、gatewayless を通じて実施することになる。
この場合も、仮想ネットワークを全て gatewayless 扱いにし、core-switch と ipv4 の bgp を行うことで、一応、vRouter を導入することは出来る (distbuted firewall 等も使用可能) ものと思われるが、vRouter 内との BUM のやり取りが出来なくなるため、仮想ネットワークと baremetal を同じサブネットに置くことは出来ない。
https://github.com/Juniper/contrail-specs/blob/master/gateway-less-forwarding.md#broadcast--multicast

このため、ブロードキャスト、マルチキャストを必要とするアプリケーションがある場合は、対応について考慮が必要となる。

3. openstack, kubenetes を使うケース (multi-tenancy を考慮する必要がある場合)

1 に似たケースで、multi-tenancy (ip重複を含む) を考慮する場合がある。
- aws vpc のように、テナントごとに重複可能なipを払い出したい場合, MSPのようなケースを想定
この場合、gatewayless だと、ip重複の場合が扱えないため、この場合は、floating-ip も overlay から取得する必要がある。
http://aaabbb-200904.hatenablog.jp/entry/2017/10/24/234846

overlay は、MPLS over UDP(GRE) か EVPN / VXLAN のどちらも可能だが、使える機材によって、どちらを採用するかを選ぶ形になるものと思われる。
※ 大まかにはルーターから直接 overlay を張る場合 (既にVRFで ipsec / mpls-over-mpls 等を受けている場合、など) はそのまま MPLS over GRE(UDP), 上記に対応する機材が無い場合、EVPN / VXLAN ということになる、ものと思われる。

4. NFVI として使うケース

NFVIとして使いたい場合、主に、controller からの bgp で、トラフィックを VNF に引き込む部分を実施することになる。
機能としては、BGPaaS, サービスチェイン等を使い、オーバーレイとしては、MPLS over GRE(UDP) が中心となる。
※ ml2 等だと、VNFにはSR-IOV 等を割り当て、トラフィックの引き込みは別途実施する、等、工夫が必要となるため、NFVI で引き込みまで実施したい場合、TungstenFabricが一つの選択肢になるものと思われる。

まとめ

TungstenFabric は、どちらかというと、3, 4 のケースで使われる場合が多いが、1, 2-1 についても、既存との互換性を保ちつつ、overlay を使ったSDNらしい動作を、提供することが出来る。
2-2 のケースについては考慮が必要だが、それ以外のケースでは、使っていってよいのではなかろうか。