gatewayless からの floating-ip 取得
Tungsten Fabric の floating-ip は、通常、SDN-GW に MPLS over (GRE/UDP) で拡張したサブネットから取得するが、
gatewayless を指定したサブネットから取得することが出来るかどうかも調べてみた。
結果として、少なくとも kubernetes から service, ingress として使用する範囲では、特に問題なく取得することが出来た。
インストールについては、以下の instance.yaml を使用し、tungsten fabric controller 1台、vRouter 2台の kubernetes 環境を構築した。
http://aaabbb-200904.hatenablog.jp/entry/2018/04/28/215922
provider_config: bms: ssh_user: root ssh_public_key: /root/.ssh/id_rsa.pub ssh_private_key: /root/.ssh/id_rsa domainsuffix: local ntpserver: ntp.nict.jp instances: bms1: provider: bms roles: config_database: config: control: analytics: analytics_database: webui: k8s_master: kubemanager: ip: 172.31.3.152 bms11: provider: bms roles: vrouter: k8s_node: ip: 172.31.12.1 bms12: provider: bms roles: vrouter: k8s_node: ip: 172.31.15.196 contrail_configuration: CONTRAIL_VERSION: r5.0.1 KUBERNETES_CLUSTER_PROJECT: {} JVM_EXTRA_OPTS: "-Xms128m -Xmx1g" global_configuration: CONTAINER_REGISTRY: tungstenfabric
また、以下のリンクと同様、kubernetes 環境のfloating-ip の取り先として、public-network1 (10.0.11.0/24) を指定した。
http://aaabbb-200904.hatenablog.jp/entry/2017/11/04/022638
gatewayless については、以下のリンクと同様、作成した public-network1 に、'IP Fabric Forwarding', 'External' にチェックを入れた。
また、public-network1 には、Policy として、'default-domain:k8s-default:k8s-default-ip-fabric-np' をアタッチした。 (この定義が無いと、vRouter 内のRPFでドロップされる)
http://aaabbb-200904.hatenablog.jp/entry/2018/05/14/003319
この状態で、以下のファイルを適用することで、service (Type: LoadBalancer), ingress を作成した。
[service]
https://github.com/tnaganawa/contrail-k8s-tutorial/blob/master/yml/3_contrail-cni-features/1-2_deployment/cirros-deployment.yaml
https://github.com/tnaganawa/contrail-k8s-tutorial/blob/master/yml/3_contrail-cni-features/2_service/loadbalancer.yaml
[ingress]
https://github.com/tnaganawa/contrail-k8s-tutorial/tree/master/yml/3_contrail-cni-features/3_ingress
上記設定によって、service, ingress で取得されたexternal-ip への経路が VyOS に配布され、別のEC2インスタンスから VyOS 経由でアクセス出来ることを確認している。
※ VyOS の設定については以下を参照
http://aaabbb-200904.hatenablog.jp/entry/2018/06/10/000427
※ aws 上で他のインスタンスから gatewayless のサブネットにアクセスする場合、'ネットワーク&セキュリティ > ネットワークインターフェース' から、'送信元/送信先の変更チェック' を 無効にする必要があるので注意
※※ vRouter, VyOS のノードに対して必要
稼働確認用の端末: 172.31.11.23 VyOS: 172.31.13.61 TungstenFabric Controller: 172.31.3.152 TungstenFabric vRouter: 172.31.12.1, 172.31.15.196 [root@ip-172-31-11-23 ~]# ip route default via 172.31.0.1 dev eth0 10.0.11.0/24 via 172.31.13.61 dev eth0 172.31.0.0/20 dev eth0 proto kernel scope link src 172.31.11.23 [root@ip-172-31-11-23 ~]# [root@ip-172-31-11-23 ~]# ssh cirros@10.0.11.3 cirros@10.0.11.3's password: $ 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 11: eth0@if12: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue \ link/ether 02:49:77:dc:06:27 brd ff:ff:ff:ff:ff:ff 11: eth0 inet 10.47.255.250/12 scope global eth0\ valid_lft forever preferred_lft forever $ Connection to 10.0.11.3 closed. [root@ip-172-31-11-23 ~]# [root@ip-172-31-11-23 ~]# [root@ip-172-31-11-23 ~]# curl -I 10.0.11.4 HTTP/1.1 200 OK Server: nginx/1.7.9 Date: Sun, 03 Feb 2019 10:19:54 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 23 Dec 2014 16:25:09 GMT ETag: "54999765-264" Accept-Ranges: bytes [root@ip-172-31-11-23 ~]# vyos@VyOS-AMI:~$ show interfaces Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down Interface IP Address S/L Description --------- ---------- --- ----------- eth0 172.31.13.61/20 u/u lo 127.0.0.1/8 u/u ::1/128 vyos@VyOS-AMI:~$ 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.0.11.3/32 [20/100] via 172.31.12.1, eth0, 00:04:31 B>* 10.0.11.4/32 [20/100] via 172.31.15.196, eth0, 00:04:31 C>* 127.0.0.0/8 is directly connected, lo C>* 172.31.0.0/20 is directly connected, eth0 vyos@VyOS-AMI:~$ vyos@VyOS-AMI:~$ show ip bgp summary BGP router identifier 172.31.13.61, local AS number 65311 IPv4 Unicast - max multipaths: ebgp 1 ibgp 1 RIB entries 3, using 288 bytes of memory Peers 1, using 4560 bytes of memory Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 172.31.3.152 4 64512 17 17 0 0 0 00:04:39 2 Total number of neighbors 1 vyos@VyOS-AMI:~$ [root@ip-172-31-3-152 ~]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE cirros-deployment-54b65ccf48-9pptp 1/1 Running 0 24m 10.47.255.250 ip-172-31-12-1.ap-northeast-1.compute.internal cirros-deployment-54b65ccf48-fnbzv 1/1 Running 0 24m 10.47.255.251 ip-172-31-15-196.ap-northeast-1.compute.internal nginx-deployment-64b46ddcc7-2s5dj 1/1 Running 0 23m 10.47.255.248 ip-172-31-12-1.ap-northeast-1.compute.internal nginx-deployment-64b46ddcc7-65ffz 1/1 Running 0 23m 10.47.255.249 ip-172-31-15-196.ap-northeast-1.compute.internal [root@ip-172-31-3-152 ~]# kubectl get svc -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR cirros-loadbalancer LoadBalancer 10.107.23.224 10.0.11.3 22:30464/TCP 24m app=cirros-deployment kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 36m <none> nginx-svc ClusterIP 10.96.143.176 <none> 80/TCP 23m app=nginx-deployment [root@ip-172-31-3-152 ~]# kubectl get ing -o wide NAME HOSTS ADDRESS PORTS AGE nginx-ingress * 10.0.11.4,10.47.255.247 80 23m [root@ip-172-31-3-152 ~]#
上記の通り、少なくとも vRouter 内に入る際、floating-ip を使う構成であれば、
SDN-GW に L3VPN / EVPN の機能が無くても
gatewayless との組み合わせによって、vRouter 内への疎通が出来るようである。
内部の通信にはテナント分離を使用したいが、外部からの通信を受けるサブネットについては、共通のサブネットを使用する、という構成の場合に、使用できるのではなかろうか。