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 内への疎通が出来るようである。

内部の通信にはテナント分離を使用したいが、外部からの通信を受けるサブネットについては、共通のサブネットを使用する、という構成の場合に、使用できるのではなかろうか。