TF gatewaylessの経路をVyOSに配布

Tungsten Fabric (以下、TF) のgatewayless では、vrouter 上に存在し、ip fabric forwarding が有効になっているvmi (通常は、コンテナを想定) について、その経路を、bgp (family inet) で配布する機能がある。
https://github.com/Juniper/contrail-specs/blob/master/gateway-less-forwarding.md

このため、vrouter と同じセグメントのルーター (vrouterのデフォルトゲートウェイを想定) に対して、peer を張ることで、ルーターとコンテナの間で、直接ping が飛ぶようにすることが出来る。
※ 以前のブログでは、/32 で static route を定義していたが、bgp で経路を渡せるようにしておけば、経路を個別に定義する必要は無くなる
http://aaabbb-200904.hatenablog.jp/entry/2018/05/14/003319

準備として、前回同様、k8s+TF の環境をaws上に構築し、default-k8s-pod-network に ip fabric forwarding の設定を行っておく。

この後、上記の k8s master / slave と同じサブネットに、vyos (ami-6946f70f) のインスタンスを作成する。
※ t2.small (1 cpu, 2 GB mem), 4GB disk を指定
※ TF controller: 172.31.11.86, TF vrouter: 172.31.2.194, vyos: 172.31.10.140 の環境を使用

vyos が起動してきたら、以下のように、TF controller とのbgp設定を実施しておく。

# set protocols bgp 65311 neighbor 172.31.11.86 remote-as 64512

上記の設定が終わったら、TFのwebui の Configure > Infrastructure > BGP Routers から、以下の画面のように、BGP の定義を作成する。
f:id:aaabbb_200904:20180609235935p:plain
f:id:aaabbb_200904:20180609235946p:plain

設定が終わった後、vyos に戻って、bgp が上がってくることを確認する (上がってくるまで 45秒-1分程度かかった)

vyos@VyOS-AMI:~$ show ip bgp summary 
BGP router identifier 172.31.10.140, local AS number 65311
IPv4 Unicast - max multipaths: ebgp 1 ibgp 1
RIB entries 5, using 480 bytes of memory
Peers 1, using 4560 bytes of memory

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
172.31.11.86    4 64512      14      13        0    0    0 00:00:08        3

Total number of neighbors 1
vyos@VyOS-AMI:~$

vyos 上でbgp の経路を確認すると、以下のようにコンテナへの経路 (next-hop は vrouter のip) が流れてきており、bgp inetでの経路配布が、正しく行われていることが確認出来る。

vyos@VyOS-AMI:~$ show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

S>* 0.0.0.0/0 [210/0] via 172.31.0.1, eth0
B>* 10.47.255.250/32 [20/100] via 172.31.2.194, eth0, 00:00:30
B>* 10.47.255.251/32 [20/100] via 172.31.2.194, eth0, 00:00:30
B>* 10.47.255.252/32 [20/100] via 172.31.2.194, eth0, 00:00:30
C>* 127.0.0.0/8 is directly connected, lo
C>* 172.31.0.0/20 is directly connected, eth0
vyos@VyOS-AMI:~$


また、この状態で、コンテナからvyosに対してping が飛ぶことを確認出来る。
※ 前回同様、aws上の ネットワーク&セキュリティ > インターフェース、の定義で、"送信元・送信先の変更チェック"、を無効にする必要があるので注意 (vrouter 用のec2インスタンスに対して実施する必要あり)

/ # ip -o a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000\    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
1: lo    inet 127.0.0.1/8 scope host lo\       valid_lft forever preferred_lft forever
1: lo    inet6 ::1/128 scope host \       valid_lft forever preferred_lft forever
11: eth0@if12: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue \    link/ether 02:dd:9c:4e:dc:6b brd ff:ff:ff:ff:ff:ff
11: eth0    inet 10.47.255.251/12 scope global eth0\       valid_lft forever preferred_lft forever
11: eth0    inet6 fe80::c0cd:54ff:fefc:4ce0/64 scope link \       valid_lft forever preferred_lft forever
/ # 
/ # 
/ # ping 172.31.10.140
PING 172.31.10.140 (172.31.10.140): 56 data bytes
64 bytes from 172.31.10.140: seq=0 ttl=63 time=0.762 ms
64 bytes from 172.31.10.140: seq=1 ttl=63 time=0.529 ms
^C
--- 172.31.10.140 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.529/0.645/0.762 ms
/ #

ネットワーク分離の要件が無い、等の理由で、オーバーレイを使う必要がない環境では、上記の構成を検討してみるのもよいのではなかろうか。