Tungsten Fabric(OpenContrail)とKubernetesをすぐに触ってみる方法(sandbox quick start on AWS)



#概要

オープンソースのSDNネットワークプラットフォームとして[Tungsten Fabric](https://tungsten.io/)(以下、略でTF) (旧OpenContrail)があるが、これをKubernetes(以下、略でk8s)の[Cloud Native Networking](https://landscape.cncf.io/)としてCNI(Container Network Interface)を体験してみるQuick Guideとして、[Tungsten Fabric 15 minutes deployment with k8s on AWS”](https://tungstenfabric.github.io/website/Tungsten-Fabric-15-minute-deployment-with-k8s-on-AWS.html)が用意されている。

基本は数クリックするだけでAWS上に環境が構築することができるが、今回は参考として日本語手順を記載しておく。

参考サイト
・[Tungsten Fabric](https://tungsten.io/)(本家サイト 英語)
・[TungstenFabricPrimer](https://github.com/tnaganawa/tungstenfabric-docs/blob/master/TungstenFabricPrimer.md) (tnaganawa氏github 英語)
・[Tungsten Fabric Contrail Meetup](https://tf-contrail.connpass.com/) (日本でのMeetup)
・[Juniper Contrail Enterprise Multicloud](https://www.juniper.net/jp/jp/products-services/sdn/contrail/contrail-enterprise-multicloud/) (TFの有償版)
・[Kubernetes Contrail Day One Book](https://www.juniper.net/jp/jp/training/jnbooks/day-one/building-containers-kubernetes-contrail/) (アーキテクチャやオペレーション方法等を1冊で説明 英語)




デプロイの大枠のステップは、

1.	AWS事前準備
2.	AWS Cloud FormationによるAWS関連リソースのデプロイ(Masterノード)
3.	k8sとTungsten Fabric関連リソースのデプロイ(MasterノードからAnsibleなど)
4.	Tungsten Fabric UIとk8s masterへのログイン
5.	利用終了(リソース削除)

となる。

なお、2〜4は自動化されているため、2のCloudFormationを数クリックするだけで環境が利用可能となる。
これを実施することで、以下のような1つのコントローラー(TFコントローラ, k8sマスター)と2つのコンピュートノード(TF vRouter, k8sノード)が作られ、k8sとTFの環境が利用できるようになる。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/b03cf16f-a988-2cb1-bbe1-f26114e702a6.png)



#1.AWS事前準備
1-1.AWSのアカウントを作成しEC2のキーペアを作成しておく。
　 ここでは手順は省略。

1-2.Instanceのサブスクライブ
今回はEC2インスタンスで CentOS 7 x86_64 HVM を利用するため、AWS Marketplaceでサブスクライブしておく。
尚、既にサブスクライブされているアカウントの場合は、以下のステップは必要ない。

手順は、

[AWS Marketplace](https://aws.amazon.com/marketplace/pp/B00O7WM7QW/)　　　
にアクセス

1.Continue to Subscribe
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/bada2588-e852-465c-452d-5562157a369f.png)

2.Accept Terms
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/d0ce32ee-d4cd-0ffd-4196-755700275b21.png)
 
3.Subscribe完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/0129ed76-e1eb-071f-1684-2867be128ca3.png)

 
尚、AWSのユーザー権限によって実施ができないため、関連リソースが利用できるようにしておく。サイトの[Appendix](https://tungstenfabric.github.io/website/Tungsten-Fabric-15-minute-deployment-with-k8s-on-AWS.html)を参照




#2. AWS Cloud FormationによるAWS関連リソースのデプロイ

AWSのリソース構築を自動化されるCloud Formationが用意されているので容易に必要環境が利用可能。基本はLaunch Stackでウィザード通りすすめるだけ。

尚、デプロイ方法の詳細は[CloudFormationの中身](https://s3-us-west-2.amazonaws.com/tungsten-fabric-sandbox/tungsten_fabric_stack_template.yaml)をみればわかるが、ここではTFやk8sをデプロイするためのEC2インスタンス(MasterNode)をまずは立ち上げている。そして、MasterNodeが起動後に、TFやk8sをデプロイするためのスクリプトをDLして実行することで構築している。


以下、手順概要。

 

1.	[Launch Stack](https://console.aws.amazon.com/cloudformation/home#/stacks/new?stackName=tungstenfabric-k8s&templateURL=https://s3-us-west-2.amazonaws.com/tungsten-fabric-sandbox/tungsten_fabric_stack_template.yaml)をクリック
2.	[次へ]
•	Sandbox UIのadmin パスワード (デフォルトのままの場合contrail123)
•	EC2 Instance type (デフォルトはt2.xlarge)
•	Key Pair (選択必須 – 準備で作成したキーを選択)
3.	[次へ]
4.	[次へ]
5.	最下部の承認チェックボックスを選択
6.	[スタックの作成] に関連リソースを作成
7.	5分程度作成にかかり、CREATE_IN_PROGRESSの状況がCREATE_COMPLETEになる
“イベント”タグで作成状況確認可能。
8.	the “出力”タブで Sandbox UI URLをアクセス
9.	usernameとpassword  は admin / contrai123(2でデフォルト以外のパスワードを指定した場合は該当パスワードを入力し、Sandbox UIにアクセス

 
以下、手順の抜粋。

2.
事前準備で用意したEC2のキーペアをKeyPairで選択する。
Passwordは指定しても、デフォルトのままでもどちらでもよい。デフォルトの場合はcontrail123 となる。
ほかはデフォルトのまま[次へ]で進んでいく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/84a4df68-c0e9-8852-376e-6b359a7c7820.png)

5.
“レビュー tungstenfabric-k8s”になったら
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/079c46b2-89ad-1470-14aa-04e891b23b55.png)

“AWS CloudFormationによってIAMリソースが作成される場合があることを証印します”にチェックして、”スタックの作成”で実行される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/8347cda6-3fed-146d-79f9-47d70284fdbd.png)

7.
ステータスが”CREATE_IN_PROGRESS”から5分程度待つと、CREATE_COMPLETEとなる。
“イベント”タブで作成状況確認も可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/b37008cb-a150-b2e2-1990-41f4fb548b1a.png)


8.
CREATE_COMPLETEになったあとに”出力”タブを見ると、MasterNode のURLが表示されるため、このURLにアクセス。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/54de84b0-7921-738e-5ba3-4bdfe2a11bf2.png)

9.
アクセス時には、ユーザーネームとパスワードを入力する必要がある。
スタック作成時のウィザードでパスワードを指定した場合は、そのパスワードを使い、デフォルトのままだと admin/contrail123 でログインできる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/bf0357c8-2689-e9de-4a6b-060ee5461fe0.png)






#3. k8sとTungsten Fabric関連リソースのデプロイ

デプロイノードのUIにアクセスすると以下のようなUIにアクセスでき、アクセス状況の確認が可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/fe7c3141-ea8d-b75c-c635-e57cdaa69f9b.png)


7/7となり、TFとk8sがインストールされるまで待つ。
約15分程度かかる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/dedaa1ed-5636-fa8d-d2d0-359b0daf6e7c.png)


- AWS additional resources エラー
<br>尚、AWSのアカウントによっては、ここで以下のようにAWSのリソース作成に失敗することがある。
<br>Your Request for accessing resources is being validated and you will not be able to launch additional resources in this region until the validation complete.
<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/6889f818-16d4-831f-2217-c0bbfe0b2493.png)
<br>この場合は、少し待つと自動的にリソースアクセスが検証された、と以下のメールが配信されてくる。
<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/091b0d51-9ee2-15d5-5d5a-2e6dd5288d3b.png)
<br>
受信後に、一旦、CloudFormationのスタックを削除して、AWSの関連リソースの削除を確認後に同じステップで起動させることで作成可能となる。


#4.Tungsten Fabric UIとk8s masterへのログイン

構築が完了すると以下のようにそれぞれのアクセス情報が表示される。
Contrail UIや該当インスタンスにログイン可能となる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/f66a615c-2dc7-3ee6-bb7a-554f6068ea15.png)

- Contrail UI:

ContrailのUIにアクセス。
表示されているようにusername : admin, password contrail123でログイン可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/4f2225d4-97fd-47af-9361-dcf0d3495707.png)


vRouterが2つ、各ノード(Control Nodes, Analytics Nodes, Config Nodes, Database Nodes)が1つずつ動作していることがわかる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/6741facb-0236-02da-086c-827665e5f180.png)



- CLIログイン

また、CLIによる接続も表示されているアクセス方法で接続可能。

Connect to controller:
ssh -i CA-TF.pem centos@xxxxxxxxxx.amazonaws.com



- Kubernetes dashboard

Tokenを選択し、表示されているTokenをコピペして “SIGN IN”
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/dfe6ce78-c8e5-acbe-2454-2117e900ed36.png)
 
K8s ダッシュボードに接続可能となる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/9f725776-916e-399b-3ab9-beff82545f17.png)

 



これで環境構築は完了。

仮想ネットワークの作成やPODへのネットワーク割当、Namespace毎のネットワーク分割など柔軟なネットワークが利用できるようになる。

今後それらのオペレーション方法は別途記載予定だが、以下、参考資料として貼り付けておく。

- [Tungsten Fabric and Kubernetes Intro](https://github.com/Juniper/contrail-controller/wiki/Kubernetes)
- [day-one-containers-kubernetes-contrail](https://github.com/pinggit/kubernetes-contrail-day-one)
 <br>但し、Day One BookはTFでなくContarilとk8sの連携について記載しており、オペレーションによっては、Contrail Command GUIというOSSのTungesten Fabricには含まれないGUIを利用しているため参考程度となるオペレーションもあり。


尚、今回のようなAWSでなく、オンプレ側にインストールする場合は、[Deploy Tungsten Fabric on Kubernetes in 1-Step Command – Centos](https://tungstenfabric.github.io/website/Tungsten-Fabric-Centos-one-line-install-on-k8s.html)や[contrail-ansible-deployer](https://github.com/Juniper/contrail-ansible-deployer/wiki/Contrail-microservice-installation-with-kubernetes)などいくつかのインストール方法が用意されている。こちらの[日本語ブログ](http://aaabbb-200904.hatenablog.jp/entry/2018/04/28/215922)も参照。

また、有償版のContrailの場合は、[Installing Standalone Kubernetes Contrail Cluster using the Contrail Command UI](https://www.juniper.net/documentation/en_US/contrail5.1/topics/example/contrail-command-cluster-kubernetes.html)として、Contrail CommandというGUIからのインストールも可能。


#5.利用終了(リソース削除)
前述のようにAWSのCloud Formationでデプロイ用のMaster Nodeを作成した後に、スクリプトでTF+K8sの環境を構築しているため、Cloud Formationで削除しただけでは利用したリソースを削除することはできない。

 
MasterNode のSandbox にアクセスし、
最下部の “Delete Sandbox”で削除する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138304/d135f0c5-64ec-c053-d847-c04ab789fa08.png)

または、個別に手動でAWSのリソースを削除する。

削除後は、念の為EC2, VPC, CloudFormationが削除されていることを確認すること。

尚、当然使わずに放置するとAWSで課金されるため注意が必要。
環境にもよるが、デフォルトのt2.xlargeのインスタンスを利用する場合、一時間辺り＄0.2程度課金がかかるため、48時間の利用で$10程度の課金が発生する。


#まとめ

以上のようにまずはログインして試してみたいという場合に、AWS上にTungesten Fabricとk8sを容易に構築することが可能。

仮想ネットワークの作成やK8s serviceのLoadbalancer 、K8s ingressのHaproxy Loadbalancerの利用ができるようになったり、[Contrail Security](https://github.com/Juniper/contrail-controller/wiki/Contrail-Security-FW-enhancements)としてタグをベースにして動的にセキュリティフィルターを適用させることもできる。また、コンテナだけでなく、仮想マシンやベアメタルサーバーを同一仮想ネットワークとするなど、様々な利用も可能となるため、今後徐々に記載する予定。


以上