opencontrailで仮想ネットワーク間のルーティング、セキュリティポリシーを構成するには
概要
前回の続きとなる。
http://aaabbb-200904.hatenablog.jp/entry/2017/10/15/034243
前回作成した k8s+contrail の環境を使用して、web/db/mgmt等のセグメントを作成し、疎通確認を行ってみる。
作成するセグメントとセキュリティポリシーは以下とする。
(セグメント) dc-web-network 10.0.11.0/24 dc-db-network 10.0.12.0/24 office-network 10.0.13.0/24 mgmt-network 10.0.14.0/24 (セキュリティポリシー) dc-web-sg: mgmt: tcp/22 dc-db-sg: web: tcp/22 (tcp/5432の代わり) mgmt: tcp/22 office-sg: all: all mgmt-sg: 172.31.9.34/32: all (稼働確認用ノードのIP, 後述)
セグメントの使い分けとしては、以下を想定している。
- web/dbのセグメントには、mgmtセグメントからだけssh可能
- dbのpostgresqlには、webからのみアクセス可能
- mgmt には稼働確認用ノードからだけssh可能
また、セグメント間は、互いにルーティングが出来るようにし、かつmgmtについては、稼働確認用のノード(contrail外)からも疎通が出来るようにしたい。
上記を実現するために、contrail 内では、'router'と、'security group'が使用できるので、以下にまとめていく。
router
contrail内のrouterは、定義した仮想ネットワーク(以下、vn)間に疎通を許可するための設定となる。
※ 内部的にはroute-targetの払い出しと、接続されたvnへの該当route-targetのインポート/エクスポート定義の追加、を実施している
上記の4つのvn間でルーティングを設定するためには、configure>networks>routersからルーターを作成(dc-routerとして作成)し、上記4つのネットワークを'connected networks'に追加すればよい。
また、次回、vMXにも該当経路を配布するため、routerのroute-target を明示的に指定している(64512:201として指定)
仮想ネットワーク内へのコンテナ作成
なお、contrail内にvnを作る場合、configure>networks>network から作成可能となる。
また、該当vn内にk8sのコンテナを作る場合、以下のようにannotationを設定することで、該当vn内にコンテナを作ることができる。
※ contrail動作の説明用の使い方で、k8s の使い方としてはあまり一般的ではないので注意
https://github.com/tnaganawa/contrail-k8s-tutorial/blob/master/yml/2_dc/cirros-dc-web.yaml#L7
今回は、各vn内に1つずつ、containerを作っておく。
security group
security groupは、openstack等で使用できるものとほぼ同じで、各vmに疎通できる通信を設定するものとなる。
contrailでは、vmに接続されている'port'を提供しているため、こちらに対してsecurity groupを設定することになる。
security group(以下、sg)では、通信の許可、しか設定できないため、基本的には、デフォルトではsgには何も設定せず、許可する通信のみsg内に追加していくことになる。
今回は、各vnごとに1つずつsgを作成し、sg名単位で許可していくことにした。
設定例は以下となる。(例では、dc-web用のsgに mgmtからの疎通を許可している)
※ ポートごとの定義は以下のように、該当ネットワーク内の各ポートに、セキュリティグループを設定していくことになる
疎通確認
作成したそれぞれのコンテナにログインするには、以下のようなコマンドが使用できる
# kubectl exec -it cirros-mgmt sh
ログイン後、ping, ssh 等で、ルーティング、セキュリティポリシーが正しく設定されていることを確認していく。
# ping 10.0.11.4 # ssh cirros@10.0.11.4
ルーティングテーブルの確認
contrailの各vnのルーティングテーブルは、以下から確認できる。
monitor>control nodes>(コントロールノード名)>routes
また、next-hop は、以下から確認できる。
monitor>virtual routers>(スレーブノード名)>interfaces
※ 上記の例では、dc-web-networkのルーティングテーブルで 10.0.12.4の行き先が40のMPLSラベルであり、該当のラベルが cirros-dc-dbに対応することがわかる。
上記のように、contrail内ではルーティング、およびL4までのファイアウォールが設定できる。
上記の定義は、スレーブノードを追加すれば、そちらのvrouterにもそのまま適用される。
各スイッチやファイアウォール、ハイパーバイザ等で、順に作業していく必要がないので、だいぶ構築が楽になるのではなかろうか。