2018年8月8日水曜日

Contrail/TungstanFabricとQFXのEVPN/VXLAN接続

Contrail/TungstenFabric 4.1からEVPN/VXLANをサポートしています。
**従来のOVSDB/VXLANはスケールやスタビリティの問題により5.0で廃止されています。

5.0時点ではEVPN/VXLAN関連のコンフィグはJuniper QFX51x0シリーズのみコントローラから自動で打ち込むことができます。
**5.1でマルチベンダ対応予定

設定方法
この例ではJuniperのQFX5100を使用します

1.Leaf Switchの登録

Configure > Physical Devices > Physical Routers
+ からNetconf Managed Physical Routerを選択
Name: Leaf Switch (HVTEP)のホスト名
Vender: Juniper
Model: qfx5100
Management IP: NetconfやSSHで接続するIP Address
Netconf Username: Netconf でコンフィグを受け付けるユーザー名
Netconf Password: Netconf でコンフィグを受け付けるパスワード
Role: Leaf
EVPN Peered TOR: チェックを入れる
JUNOS Service Port: Leaf SwitchのNetconf 待受ポート

2.BGP Routerの設定

Configure > Infrastructure > BGP Routers
Router Type: BGP Router
Name: Leaf Switch (HVTEP)のホスト名
Vender ID: Juniper
IP Address: BGPのソースIP Loopback IPとしてコンフィグされる
Router ID: BGPのルータID 通常 IP Addressと同じ
Autonomous System: Leaf SwitchのAS番号
BGP Router ASN: Leaf SwitchがBGP peerと接続する際に使用するAS番号 通常Autonomous Systeと同じ
Address Families: inet-vpn, route-target, e-vpnのみ指定
Advanced Options > Physical Router: Physical Deviceで登録したLeaf Switchを選択
Assosiate Peer(s) > Peer: Control nodeを指定

3.VTEP情報の設定

Configure > Physical Devices > Physical Routers
作成したPhysical RoutersのVTEP情報を設定する。右の歯車アイコンをクリック。
VTEP Address: Loopback IPを設定
Loopback IP: Loopback IP を設定


4.Leaf Switchの確認

Contrail/TungstenFabricでコンフィグをJunosに打ち込むと group __contrail__配下にコンフィグされる。
show configuration groups __contrail__で確認すると以下のようにループバックやBGPのコンフィグが確認できます。
interfaces {
    /* Interfaces Configuration */
    lo0 {
        /* Router Loopback Interface */
        unit 0 {
            family inet {
                address 10.84.54.2/32 {
                    primary;
                    preferred;
                }
            }
        }
    }
}
routing-options {
    /* Global Routing Options */
    router-id 10.84.54.2;
    route-distinguisher-id 10.84.54.2;
    autonomous-system 64519;
    resolution {
        rib bgp.rtarget.0 {
            resolution-ribs inet.0;
        }
    }
}
protocols {
    /* Protocols Configuration */
    bgp {
        /* BGP Router: qfx5100-48t-1, UUID: 5e96224d-f708-4207-9ac3-b15a2699494e */
        group _contrail_asn-64519 {
            type internal;
            local-address 10.84.54.2;
            hold-time 90;
            family evpn {
                signaling;
            }
            family route-target;
        }
        /* BGP Router: qfx5100-48t-1, UUID: 5e96224d-f708-4207-9ac3-b15a2699494e */
        group _contrail_asn-64519-external {
            type external;
            multihop;
            local-address 10.84.54.2;
            hold-time 90;
            family evpn {
                signaling;
            }
            family route-target;
            /* BGP Router: overcloud-contrailcontroller-0, UUID: 72950843-4008-4e6f-8019-0d875e06dcd6 */
            neighbor 10.84.50.91 {
                peer-as 65534;
            }
        }
    }
}
policy-options {
    community _contrail_switch_policy_ members target:64519:1;
}
switch-options {
    vtep-source-interface lo0.0;
}

5.仮想ネットワークをLeaf Switchに設定する

Configure > Physical Devices > Interfaces > {Leaf Swtich}
Name: 設定するインターフェイスを設定 xe-0/0/1.0 のようにサブインターフェイスまで指定
Logical Interface Properties > Logical Interface Type: Server
Logical Interface Properties > VLAN ID: VLAN番号を指定。Untagの場合は 0
Logical Interface Properties > Virtual Network: ポートに割り当てる仮想ネットワークを指定
Logical Interface Properties > Server MAC: ベアメタルサーバにDHCPでIPアドレスを割り当てる場合はMACアドレスを設定。ダミーでも可
** TSNが必要
Logical Interface Properties > IP address: 割り当てるIPアドレスを設定 空欄でも可

6.Leaf Switchの確認

自動的にインターフェイスがコンフィグされ、VNIやRoute-targetなど必要なものもコンフィグされる
__contrail__ {
    interfaces {
        /* Interfaces Configuration */
        lo0 {
            /* Router Loopback Interface */
            unit 0 {
                family inet {
                    address 10.84.54.2/32 {
                        primary;
                        preferred;
                    }
                }
            }
        }
        xe-0/0/1 {
            flexible-vlan-tagging;
            native-vlan-id 4094;
            encapsulation extended-vlan-bridge;
            /* L2 EVPN Untagged Interface, Virtual Network: vxlan-vn1, UUID: 1e1009e1-8113-4e62-b06f-24a3f5467b3f */
            unit 0 {
                vlan-id 4094;
            }
        }
    }
    routing-options {
        /* Global Routing Options */
        router-id 10.84.54.2;
        route-distinguisher-id 10.84.54.2;
        autonomous-system 64519;
        resolution {
            rib bgp.rtarget.0 {
                resolution-ribs inet.0;
            }
        }
    }
    protocols {
        /* Protocols Configuration */
        bgp {
            /* BGP Router: qfx5100-48t-1, UUID: 5e96224d-f708-4207-9ac3-b15a2699494e */
            group _contrail_asn-64519 {
                type internal;
                local-address 10.84.54.2;
                hold-time 90;
                family evpn {
                    signaling;
                }
                family route-target;
            }
            /* BGP Router: qfx5100-48t-1, UUID: 5e96224d-f708-4207-9ac3-b15a2699494e */
            group _contrail_asn-64519-external {
                type external;
                multihop;
                local-address 10.84.54.2;
                hold-time 90;
                family evpn {
                    signaling;
                }
                family route-target;
                /* BGP Router: overcloud-contrailcontroller-0, UUID: 72950843-4008-4e6f-8019-0d875e06dcd6 */
                neighbor 10.84.50.91 {
                    peer-as 65534;
                }
            }
        }
        evpn {
            vni-options {
                vni 5 {
                    vrf-target target:64512:100000;
                }
            }
            encapsulation vxlan;
            multicast-mode ingress-replication;
            extended-vni-list all;
        }
    }
    policy-options {
        /* Policy Options */
        /* Virtual Network: vxlan-vn1, UUID: 1e1009e1-8113-4e62-b06f-24a3f5467b3f, Route Targets Type: Import */
        policy-statement _contrail_vxlan-vn1-l2-5-import {
            term _contrail_switch_policy_ {
                from community _contrail_switch_policy_;
                then accept;
            }
            term t1 {
                from community [ _contrail_target_65534_8000003 _contrail_target_64512_100000 ];
                then accept;
            }
        }
        /* L2 Switch Global Export Policy */
        policy-statement _contrail_switch_export_policy_ {
            term t1 {
                then {
                    community add _contrail_switch_export_community_;
                }
            }
        }
        community _contrail_switch_export_community_ members [ target:65534:8000003 target:64512:100000 ];
        community _contrail_target_65534_8000003 members target:65534:8000003;
        community _contrail_target_64512_100000 members target:64512:100000;
        community _contrail_switch_policy_ members target:64519:1;
    }
    switch-options {
        vtep-source-interface lo0.0;
        route-distinguisher 10.84.54.2:1;
        vrf-import _contrail_vxlan-vn1-l2-5-import;
        vrf-export _contrail_switch_export_policy_;
        vrf-target {
            target:64519:1;
            auto;
        }
    }
    vlans {
        contrail_vxlan-vn1-l2-5 {
            interface xe-0/0/1.0;
            vxlan {
                vni 5;
            }
        }
    }
}

7.Leaf Switchのテーブル確認

BGPやEthernetテーブルを確認すると、コントローラやBGPピアからMACアドレスやRemote VTEPの情報が確認できる。
show ethernet-switching table 
MAC flags (S - static MAC, D - dynamic MAC, L - locally learned, P - Persistent static
           SE - statistics enabled, NM - non configured MAC, R - remote PE MAC, O - ovsdb MAC)


Ethernet switching table : 5 entries, 5 learned
Routing instance : default-switch
   Vlan                MAC                 MAC      Logical                Active
   name                address             flags    interface              source
   contrail_vxlan-vn1-l2-5 00:00:5e:00:01:01 DR     esi.1736               05:00:00:fc:00:00:00:00:05:00
   contrail_vxlan-vn1-l2-5 02:ed:68:05:27:94 D      vtep.32769             10.84.50.94
   contrail_vxlan-vn1-l2-5 08:81:f4:89:72:e0 D      vtep.32771             10.84.54.1
   contrail_vxlan-vn1-l2-5 10:0e:7e:dd:8f:43 D      vtep.32770             10.84.54.4
   contrail_vxlan-vn1-l2-5 10:0e:7e:dd:8f:44 D      xe-0/0/1.0
show route table bgp.evpn.0
   bgp.evpn.0: 12 destinations, 12 routes (12 active, 0 holddown, 0 hidden)
   + = Active Route, - = Last Active, * = Both

   1:10.84.54.1:0::050000fc000000000500::FFFF:FFFF/192 AD/ESI
                      *[BGP/170] 00:03:34, localpref 100, from 10.84.50.91
                         AS path: 65534 64512 I, validation-state: unverified
                       > to 10.84.53.13 via xe-0/0/46.0
   2:10.84.50.94:20::5::02:ed:68:05:27:94/304 MAC/IP
                      *[BGP/170] 00:03:34, MED 100, localpref 100, from 10.84.50.91
                         AS path: 65534 ?, validation-state: unverified
                       > to 10.84.53.13 via xe-0/0/46.0
   2:10.84.54.1:7::5::00:00:5e:00:01:01/304 MAC/IP
                      *[BGP/170] 00:03:34, localpref 100, from 10.84.50.91
                         AS path: 65534 64512 I, validation-state: unverified
                       > to 10.84.53.13 via xe-0/0/46.0
   2:10.84.54.1:7::5::08:81:f4:89:72:e0/304 MAC/IP
                      *[BGP/170] 00:03:34, localpref 100, from 10.84.50.91
                         AS path: 65534 64512 I, validation-state: unverified
                       > to 10.84.53.13 via xe-0/0/46.0
   2:10.84.54.4:1::5::10:0e:7e:dd:8f:43/304 MAC/IP
                      *[BGP/170] 00:03:34, localpref 100, from 10.84.50.91
                         AS path: 65534 64520 I, validation-state: unverified
                       > to 10.84.53.13 via xe-0/0/46.0
   2:10.84.50.94:20::5::02:ed:68:05:27:94::10.0.0.6/304 MAC/IP
                      *[BGP/170] 00:03:34, MED 100, localpref 100, from 10.84.50.91
                         AS path: 65534 ?, validation-state: unverified
                       > to 10.84.53.13 via xe-0/0/46.0
   2:10.84.54.1:7::5::00:00:5e:00:01:01::10.0.0.1/304 MAC/IP
                      *[BGP/170] 00:03:34, localpref 100, from 10.84.50.91
                         AS path: 65534 64512 I, validation-state: unverified
                       > to 10.84.53.13 via xe-0/0/46.0
   2:10.84.54.1:7::5::08:81:f4:89:72:e0::10.0.0.14/304 MAC/IP
                      *[BGP/170] 00:03:34, localpref 100, from 10.84.50.91
                         AS path: 65534 64512 I, validation-state: unverified
                       > to 10.84.53.13 via xe-0/0/46.0
   3:10.84.50.94:20::5::10.84.50.94/248 IM
                      *[BGP/170] 00:03:34, MED 200, localpref 100, from 10.84.50.91
                         AS path: 65534 ?, validation-state: unverified
                       > to 10.84.53.13 via xe-0/0/46.0
   3:10.84.54.1:7::5::10.84.54.1/248 IM
                      *[BGP/170] 00:03:34, localpref 100, from 10.84.50.91
                         AS path: 65534 64512 I, validation-state: unverified
                       > to 10.84.53.13 via xe-0/0/46.0
   3:10.84.54.2:1::5::10.84.54.2/248 IM
                      *[EVPN/170] 00:03:33
                         Indirect
   3:10.84.54.4:1::5::10.84.54.4/248 IM
                      *[BGP/170] 00:03:34, localpref 100, from 10.84.50.91
                         AS path: 65534 64520 I, validation-state: unverified
                       > to 10.84.53.13 via xe-0/0/46.0



2018年6月17日日曜日

OpenShift3.7/Kubernetes のLabelsを使用したFirewall設定例

前回OpenShift 3.7 + TungstenFabricをインストールしました。
今回はその環境を利用して、PODへの仮想ネットワークの適用とLabelsでのFirewall設定を行います。

まず、OpenShift上で新しいプロジェクトを作成します。
WebUIから操作する場合、初期画面のCreate Projectをクリックし、Nameにプロジェクト名を入れると作成されます。
cliの場合は
oc new-project (project名)

で作成されます。
プロジェクトに移動するには
oc project (project名)

で移動します。
次にTungstenFabricのWebUIから仮想ネットワークを作成します。
Configure > Networking > Networks をクリックし  default-domain > (プロジェクト名) を選択肢、仮想ネットワーク名とCIDRを入力し、Saveします。
このとき、Advanced option内のSNAT にチェックを入れると、podがInternetにアクセスする場合に、nodeのIPアドレスでNATしてInternetに接続します。
**専用のゲートウェイルータがない場合、このオプションを入れることでInternetには接続可能です
次にpod (Container)を作成するyamlファイルを定義します。
以下が例ですが、上記で作成した仮想ネットワークを"annotations"という項目内にドメイン名、プロジェクト名、仮想ネットワーク名を設定します。
このannotationsによって、pod-networkではなく専用の仮想ネットワークが割り当てられます。また、labelsにはこのApplicationとlabelの2を設定しています。
Applicationは複数のpodで構成されるサービスとして定義し、labelはpodのロールを定義しています。
apiVersion: v1
kind: Pod
metadata:
  name: service1-web
  labels:
    Application: service1
    label: web
  annotations: {
    "opencontrail.org/network" : '{"domain":"default-domain", "project": "test-project", "name":"VN1"}'
  }
spec:
  containers:
  - name: service1-web
    image: cirros

同様のyamlをapi,dbも同じように作成します。githubにサンプルがあります。
それではこれらのpodを作成します。
oc project test-project
Now using project "test-project" on server "https://openshift-1:8443".
oc create -f service1-web.yaml
pod "service1-web" created
podの状態を確認します。
oc get pod -o wide
NAME           READY     STATUS    RESTARTS   AGE       IP             NODE
service1-web   1/1       Running   0          3m        192.168.10.3   openshift-2
podへ192.168.10.0/24 より払い出されているのが確認できます。
同様にapi,dbも作成します。
作成されたら通信確認を行います。
WebUIのTerminalもしくはcliよりoc exec -it (pod 名) sh のようにpodで実行するコマンドを入れるとshellなどに入れます。
webから192.168.10.4および192.168.10.5に疎通を確認します。
[root@openshift-1 pod]# oc exec -it service1-api sh
/ # ping -c 2 192.168.10.4
PING 192.168.10.4 (192.168.10.4): 56 data bytes
64 bytes from 192.168.10.4: seq=0 ttl=64 time=0.064 ms
64 bytes from 192.168.10.4: seq=1 ttl=64 time=0.073 ms

--- 192.168.10.4 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.064/0.068/0.073 ms
/ # ping -c 2 192.168.10.5
PING 192.168.10.5 (192.168.10.5): 56 data bytes
64 bytes from 192.168.10.5: seq=0 ttl=64 time=0.539 ms
64 bytes from 192.168.10.5: seq=1 ttl=64 time=0.075 ms

--- 192.168.10.5 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.075/0.307/0.539 ms
次にContrailでFirewallを作成します。
OpenShiftで作成したLabelはContrail上でも確認できます。
Configure > Tags > Global TagsをクリックするとTag(Label)の一覧が表示されます。
先にContrail側でTagを定義し、そのTagをOpenShift側で利用することも可能です。

次にTagベースのFirewallを作成します。
Configure > Security > Project Scoped Policies をクリックし、FWを適用したいプロジェクトを選択し、+ をクリックするとWizardが開きます。
Application Tagにpodが属するApplicationを選択しこのポリシーの名前を入力してAdd Firewall Policyをクリックします。

Firewall の作成画面が開くので、名前を入力してNextをクリックします。
Firewallルールの入力を行うには+をクリックして行を追加します。
後はLabelを一覧から選択し許可します。Policyを追加すると、定義されていない通信は行えなくなります。(よくあるFirewallの暗黙のDeny)入力したらSave Policyをクリックします。
画面が戻ってくるのでFinishをクリックし、Wizardを終了させます。
これでTagベースのFirewallの設定は終了です。

最後に通信確認です。
WebのpodからapiとdbにPingを打つと、apiは通信できますが、dbはタイムアウトして通史ができなくなりました。
[root@openshift-1 pod]# oc exec -it service1-web sh
/ # ip a
1: lo:  mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
27: eth0@if28:  mtu 1500 qdisc noqueue
    link/ether 02:b7:00:bf:48:72 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.3/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::8475:40ff:fee0:2a/64 scope link
       valid_lft forever preferred_lft forever
/ # ping -c 2 192.168.10.4
PING 192.168.10.4 (192.168.10.4): 56 data bytes
64 bytes from 192.168.10.4: seq=0 ttl=64 time=0.345 ms
64 bytes from 192.168.10.4: seq=1 ttl=64 time=0.083 ms

--- 192.168.10.4 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.083/0.214/0.345 ms
/ # ping -c 2 192.168.10.5
PING 192.168.10.5 (192.168.10.5): 56 data bytes

--- 192.168.10.5 ping statistics ---
2 packets transmitted, 0 packets received, 100% packet loss

以上のことから、TungstenFabricを使用すると、podに任意の仮想ネットワークを割当、さらにTag(Label)ベースでの通信制御ができることようになります。

2018年6月14日木曜日

OpenShift Enterprise 3.7とTungstenFabric(OpenContrail)のインストール

今回はRedhat OpenShift EnterpriseとTungstenFabric(OpenContrailから名前変更)のインストール手順を解説します。

OpenShift EnterpriseはRedhatのRepositoryからダウンロードする必要があるため、Redhatのトライアルページより評価ライセンスを取得してください。
** OpenShift Originもありますが、3.7のインストール時に依存関係でうまくいかないのでEnterpriseを推奨します。

環境と構成
Master node: 192.168.0.3
Centos7.4 CPU 8 core, 32 GB Memory, 160 GB Disk
Slave Node: 192.168.0.4
Centos7.4 CPU 8 core, 32 GB Memory, 160 GB Disk

物理サーバでもKVM,ESXi上の仮想マシン、AWS,Azuruなどのパブリッククラウド上の仮想マシンでも動作します。

手順

  1. サーバ事前準備
  2. Redhat Subscriptionの登録
  3. パッケージインストール
  4. ansible playbookの作成
  5. ansible playbookの実行
  6. インストール確認
  7. OpenShiftユーザー登録

1.サーバ事前準備

Master nodeで証明書を作成し、すべてのサーバに公開鍵を登録する。
ssh-keygen を実行

ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:PtKQwG9czoaofivrXhXa7lE4e9WBxwiREo49/0JzKjg root@telemetry1
The key's randomart image is:
+---[RSA 2048]----+
|      ..oo       |
|   . +. .. +     |
|    + =.. o +    |
|     B @   o .   |
|    o % S o .    |
|   . = X *       |
|  . E * B .      |
| ....o = o       |
| o=+...          |
+----[SHA256]-----+

公開鍵を登録

sudo cat .ssh/id_rsa.pub >> /root/.ssh/authorized_keys

Slave nodeにはid_rsa.pubをコピーし、同様にrootに鍵を登録する。

/etc/hostsの登録
すべてのサーバにホスト名でIPが引けるように設定。ドメイン含めた登録が必要

cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.3 openshift-1 openshift-1.localdomain
192.168.0.4 openshift-2 openshift-2.localdomain

接続確認
[root@openshift-1 ~]# ssh openshift-1.localdomain
The authenticity of host 'openshift-1.localdomain (192.168.0.3)' can't be established.
ECDSA key fingerprint is SHA256:mdqM+NSjkyew6ErUSGjBXPst/V9L34e2ik0f04RuLZo.
ECDSA key fingerprint is MD5:73:62:a6:55:d4:ab:4a:6d:94:0f:1f:f9:94:25:fd:55.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'openshift-1.localdomain' (ECDSA) to the list of known hosts.
Last login: Wed Jun 13 18:21:05 2018
[root@openshift-1 ~]#
[root@openshift-1 ~]#

2.Redhat Subscriptionの登録

RedhatのWeb サイトで取得したユーザーをすべてのノードに登録します。

subscription-manager register --username (username) --password (password) --force

サブスクリプションをすべてのノードの登録します。
subscription-manager list --available --matches '*OpenShift*'
subscription-manager attach --pool=(pool-ID)

不要なRepositoryを無効にし、必要なもののみ有効にします。
subscription-manager repos --disable="*"
subscription-manager repos \
                --enable="rhel-7-server-rpms" \
                --enable="rhel-7-server-extras-rpms" \
                --enable="rhel-7-server-ose-3.7-rpms" \
                --enable="rhel-7-fast-datapath-rpms"

3.パッケージインストール

必要パッケージをインストールします。
yum install wget -y && wget -O /tmp/epel-release-latest-7.noarch.rpm https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm && rpm -ivh /tmp/epel-release-latest-7.noarch.rpm
sudo rpm --import "https://sks-keyservers.net/pks/lookup?op=get&search=0xee6d536cf7dc86e2d7d56f59a178ac6c6238f52e"
yum update -y
yum install atomic-openshift-excluder atomic-openshift-utils git python-netaddr ansible ntp -y
atomic-openshift-excluder unexclude -y

systemctl stop ntpd
ntpdate -s ntp.nict.jp
systemctl start ntpd

git clone https://github.com/savithruml/openshift-ansible -b contrail-openshift
wget -O /root/openshift-ansible/inventory/byo/ose-prerequisites.yml https://raw.githubusercontent.com/savithruml/openshift-contrail/master/openshift/install-files/all-in-one/ose-prerequisites.yml
wget -O /root/openshift-ansible/inventory/byo/ose-install https://raw.githubusercontent.com/savithruml/openshift-contrail/master/openshift/install-files/all-in-one/ose-install

4.ansible playbookの作成

contrail-openshiftへ移動
cd contrail-openshift

inventory/byo/ose-installファイルの修正 Githubにサンプルをアップロードしています。下の方のIPアドレスとホスト名を環境に合わせて変更してください。

5.ansible playbookの実行

Ansible Playbookを実行します。
ansible-playbook -i inventory/byo/ose-install inventory/byo/ose-prerequisites.yml
ansible-playbook -i inventory/byo/ose-install playbooks/byo/openshift_facts.yml
ansible-playbook -i inventory/byo/ose-install playbooks/byo/config.yml
なにもエラーが無く終了したら完了です。
うまくいかない場合、TungstenFabricのSlackチャネル#users_japaneseまで質問を投げてください。日本語で質問できます。

終了したらSlave nodeをリブートします。
ssh 192.168.0.4 reboot

6.インストール確認

oc get pod -n kube-systemをMaster nodeで実行し、パッケージが正常かどうしているか確認します。
以下のようにCrashLoopBackOffやImagePullBackOffが表示される場合があります。
oc get pod -n kube-system
NAME                                 READY     STATUS             RESTARTS   AGE
config-zookeeper-t5246               1/1       Running            0          8h
contrail-agent-5bftt                 2/2       Running            6          9m
contrail-analytics-2gttb             7/7       Running            5          17m
contrail-analytics-zookeeper-jbdjd   1/1       Running            0          8h
contrail-analyticsdb-4bz9w           2/2       Running            1          17m
contrail-configdb-cb4db              1/1       Running            0          17m
contrail-controller-config-xmtmd     5/5       Running            0          13m
contrail-controller-control-jxrmw    4/4       Running            3          12m
contrail-controller-webui-5xg58      0/2       CrashLoopBackOff   12         9m
contrail-kube-manager-48bl5          1/1       Running            0          8h
kafka-26kmm                          1/1       Running            0          8h
rabbitmq-dnwnb                       1/1       Running            0          8h
redis-x2t5t                          1/1       Running            0          8h

ImagePullBackOffの場合は/etc/resolve.confが自身のIPアドレスに変更されているため、修正してください。
CrashLoopBackOffの場合は一度PODを削除して再作成されるのを待ってください。
oc delete pod -n kube-system config-zookeeper-t5246 など

contrail-controller-webuiがCrashLoopBackOffの場合、構成ファイルを修正してください。
oc edit configmap env -n kube-systemを実行し、"ANALYTICS_API_VIP:"と"CONFIG_API_VIP:"を削除したあと、oc delete pod -n kube-system contrail-kube-manager-xxxx を実行し、暫く待つとRunningになります。
oc get pod -n kube-systemを実行し、以下のようにすべてRunningになれば終了です。
oc get pod -n kube-system
NAME                                 READY     STATUS    RESTARTS   AGE
config-zookeeper-t5246               1/1       Running   0          8h
contrail-agent-5bftt                 2/2       Running   6          25m
contrail-analytics-2gttb             7/7       Running   5          33m
contrail-analytics-zookeeper-jbdjd   1/1       Running   0          8h
contrail-analyticsdb-4bz9w           2/2       Running   1          33m
contrail-configdb-cb4db              1/1       Running   0          33m
contrail-controller-config-xmtmd     5/5       Running   0          29m
contrail-controller-control-jxrmw    4/4       Running   3          28m
contrail-controller-webui-psbjt      2/2       Running   0          1m
contrail-kube-manager-48bl5          1/1       Running   0          8h
kafka-26kmm                          1/1       Running   0          8h
rabbitmq-dnwnb                       1/1       Running   0          8h
redis-x2t5t                          1/1       Running   0          8h

7.OpenShiftユーザー登録

OpenShiftで使用するユーザーを登録します。

htpasswd /etc/origin/master/htpasswd admin
oadm policy add-cluster-role-to-user cluster-admin admin

最後にWebUIにアクセスできるか確認します。
OpenShift Enterprise WebUI : https://192.168.0.3:8443 admin/上で設定したパスワード
TungstenFabric WebUI : https://192.168.0.3:8143 admin/contrail123
** エラーがありますが、Process Failure やA Core File has been generatedは表示上の問題ですので無視してください。

リモートからアクセスでいない場合、iptablesに引っかかっています。
iptables -I INPUT -j ACCEPTなどで8443や8143ポートを開けてください。

** PODの作成やFirewallの作成は6/16更新予定です。
**更新しました

2017年11月15日水曜日

Contrail 4.0 での既存環境との接続 by Simple Gateway

前回Openstack OcataとOpenContrail 4.0を作成しました。この状態ではVM間の通信は可能ですが、既存環境からの通信はできません。
OpenContrailは別環境と接続する場合、基本的にMPBGP+MPLSoGREを話せるゲートウェイルータが必要です。(例えばJuniper MXシリーズやCisco ASRシリーズ)
このようなルータがない場合、OpenContrailのvRouterをゲートウェイとして既存環境と接続するSimple Gateway機能を利用する必要があります。

Simple GatewayはOpenstack NeutronのGateway Nodeのような働きをします。
Compute node内にSimple Gatewayが作成され、ContrailのvRouterと連携し、オーバーレイトンネルと物理NICとの橋渡しを行います。


イメージとしては下図のように、VMがインターネットなどに抜けたい場合、一度Contrail vRouterの通信をSimple Gatewayで終端。その後Simple Gatewayかれ出てきたパケットはCompute nodeのルーティングテーブルを参照し、GW経由でインターネットに接続します。

Simple Gateway作成手順

  1. Public用の仮想ネットワークを作成(外部接続用アドレス)
  2. Simple Gatewayを作成
  3. Private用の仮想ネットワークを作成(仮想マシン用)
  4. 仮想マシンを作成
  5. Floating IPを仮想マシンに設定
  6. 通信確認

1. Public用の仮想ネットワークを作成(外部接続用アドレス)

OpenstackでもOpenContrailでもどちらからでも作成可能です。

Openstackから作成する場合

作成
source openstackrc
openstack network create public --external
openstack subnet create --network public --subnet-range 203.0.113.0/24 public_subnet
確認
openstack network list --external
+--------------------------------------+--------+--------------------------------------+
| ID                                   | Name   | Subnets                              |
+--------------------------------------+--------+--------------------------------------+
| 08960915-ef83-4980-ae3d-08aea937d4fb | public | bea3e1c9-4658-4b17-bfb6-9ee8047d04c6 |
+--------------------------------------+--------+--------------------------------------+

Contrailから作成する場合

Configure > Networking >Networks を開き、+をクリックし以下を入力しSave
Name: 仮想ネットワーク名
Subnet:CIDRにネットワークアドレス (今回は203.0.113.0/24)
Adbanced Options: Externalにチェック

2.Simple Gatewayを作成

SimpleGatewayはCompute nodeに作成するため、対象ノードにログインします。
ログイン後、以下のコマンドを発行します。
docker exec agent python /opt/contrail/utils/provision_vgw_interface.py --oper create --interface vgw1 --subnets 203.0.113.0/24 --routes 0.0.0.0/0 --vrf default-domain:admin:public:public
引数の解説

  • --oper: 作成する場合はcreate 削除する場合はdelete
  • --interface: Simple Gatewayの名前。複数Simple Gatewayを作成する場合はユニークな名前を指定
  • --subnets: Simple Gatewayが使用するサブネットを指定。公開したい仮想ネットワークのサブネットを指定
  • --routes: Simple Gatewayが通信してよいネットワークを指定。インターネットなど、不特定のネットワークの場合は0.0.0.0/0を指定。特定の場合は10.0.0.0/24 などを指定。複数設定可能
  • --vrf: Contrailが使用するVRF名を使用。シンタックスはdefault-domain:<project名>:<仮想ネットワーク名>:<仮想ネットワーク名>
作成が完了するとroute -n にネットワークが追加される
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.84.50.100    0.0.0.0         UG    0      0        0 vhost0
10.84.50.0      0.0.0.0         255.255.255.0   U     0      0        0 vhost0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
203.0.113.0     0.0.0.0         255.255.255.0   U     0      0        0 vgw1
GWや他の物理サーバなどから203.0.113.0/24に通信したい場合は、Compute nodeのvhost0のIPアドレスをNexthopにしたルーティングテーブルを追加してください。
例えば、kvmホストから203.0.113.0/24に通信したい場合以下のような設定が必要です。
また、KVM Hostから外部に通信する場合、NATが必要な場合は併せてせっていしてください。
route add -net 203.0.113.0 netmask 255.255.255.0 gw 10.84.50.119
iptables -A POSTROUTING -t nat -o em1 -s 203.0.113.0/24 -j MASQUERADE

3.Private用の仮想ネットワークを作成(仮想マシン用)

OpenstackでもOpenContrailでもどちらからでも作成可能です。

Openstackから作成する場合

作成
source openstackrc
openstack network create user-VN1
openstack subnet create --network user-VN1 --subnet-range 192.168.0.0/24 user-VN1_subnet
確認
openstack network list --internal
+--------------------------------------+----------+--------------------------------------+
| ID                                   | Name     | Subnets                              |
+--------------------------------------+----------+--------------------------------------+
| 7f26e637-e4d2-4ce1-9afc-572837a096d4 | user-VN1 | 019c0a3c-b4a3-492a-8832-633ceffc07a3 |
+--------------------------------------+----------+--------------------------------------+

Contrailから作成する場合

Configure > Networking >Networks を開き、+をクリックし以下を入力しSave
Name: 仮想ネットワーク名
Subnet:CIDRにネットワークアドレス (今回は192.168.0.0/24)

4.仮想マシンを作成

Horizonやコマンドなどでuser-VN1に仮想マシンを作成します。
source openstackrc
nova boot --flavor m1.tiny --image cirros --nic net-id=7f26e637-e4d2-4ce1-9afc-572837a096d4 VM1 

5.Floating IPを仮想マシンに設定

OpenstackでもOpenContrailでもどちらからでも作成可能です。

Openstackから作成する場合

作成
source openstackrc
openstack floating ip create public
openstack server add floating ip VM1 203.0.113.3
確認
openstack floating ip list
+--------------------------------------+---------------------+------------------+--------------------------------------+--------------------------------------+----------------------------------+
| ID                                   | Floating IP Address | Fixed IP Address | Port                                 | Floating Network                     | Project                          |
+--------------------------------------+---------------------+------------------+--------------------------------------+--------------------------------------+----------------------------------+
| ef192165-151f-42f9-b58b-6215e6f92ba1 | 203.0.113.3         | 192.168.0.3      | a3b9d5a8-f33a-48be-92a3-d3b3508f9503 | 08960915-ef83-4980-ae3d-08aea937d4fb | 31ecaa5de0ea4ba783b8e267e6249d79 |
+--------------------------------------+---------------------+------------------+--------------------------------------+--------------------------------------+----------------------------------+

Contrailから作成する場合

Configure > Networking >Floating IPsを開き、+をクリックし選択しSave
Floating IP Pool: admin:public:default (203.0.113.0/24)
作成後、アドレスの右端のアイコンをクリックし、Associate Portを選択。Portより対象VMのIPアドレスを選択し、Save

6.通信確認

ここまで終わったら外部と通信できるか確認します。
通信ができない場合以下を確認してください
  • Simple gatewayのサブネットやルートの設定が正しいか
  • 外部からの通信がおかしい場合、Security groupで外部からの許可がされているか
  • KVMやGWのルーティングテーブルはが正しいか
  • NATが必要か
切り分けはCompute nodeのvhost0やKVM hostでtcpdumpし、どこまでパケットが出ているのか確認するとわかりやすいです。
解決しない場合はOpenContrailのSlack(英語)やユーザーズグループ(日本語)に問い合わせてください。

2017年10月17日火曜日

Kolla Openstack Ocata と Open Contrail4.0のインストール

DockerhubにアップロードされているOpenstack OcataとOpenContrail4.0のコンテナイメージを利用して、インストールする方法を紹介します。

今回の構成はUbuntu16.04.2をKVM上に4つ作成し、それぞれ以下のような役割になっています。作成したVMは2つ以上のNICを設定してください。(Openstack kollaの仕様)
作業はすべてkolla1から行います。
** KVMを利用する場合、ホストマシンでnestedを有効にしVMのCPUアトリビュートでVMXを有効にしてください。

構成:
kolla1(10.84.50.117): Openstack Controller/Ansible
kolla2(10.84.50.118): Contrail Controller
kolla3(10.84.50.119): Compute node
kolla4(10.84.50.120): Compute node
手順:
  1. 事前準備
  2. Ansible Playbookのダウンロードと設定
  3. インストール
  4. インストール後作業
  5. 動作確認

1.事前準備

今回はkolla1より各サーバにRootアクセスして設定するため、証明書を発行し対象サーバに登録します。
Kolla1で実行
ssh-keygen -t rsa 
すべてのノードでに対して実行
ssh-copy-id -i ~/.ssh/id_rsa.pub lab@10.84.50.117
ssh -t lab@10.84.50.117 'sudo mkdir /root/.ssh'
ssh -t lab@10.84.50.117 'sudo cp /home/lab/.ssh/authorized_keys /root/.ssh/authorized_keys' 

Ansibleを使うための事前準備
Kolla1で実行
apt update
apt install python-pip sshpass
pip install -U pip
pip install -U ansible
pip install  pyOpenSSL==16.2.0
すべてのノードに対して実行
ssh -t root@10.84.50.117 'apt-get -y install python-simplejson'

2.Ansible Playbookのダウンロードと設定

githubからインストール用ファイルをダウンロードします。
git clone https://github.com/gokulpch/OpenContrail-Kolla.git
ダウンロードしたファイルは2つあり、contrail-ansibleはOpenContrial用、kolla-ansibleはOpentack用です。

Openstackの設定ファイルの変更

OpenContrail-Kolla/kolla-ansible/etc/kolla/globals.ymlの修正

以下の4項目を修正します。
network_interface: "ens3"
kolla_internal_vip_address: "10.84.50.117"
contrail_api_interface_address: "10.84.50.118"
neutron_external_interface: "ens4"
  • network_interface:実際に使用するVMのNICを設定
  • kolla_internal_vip_address: Kolla1のens3のIPアドレスを設定
  • contrail_api_interface_address: kolla2のens3のIPアドレスを設定
  • neutron_external_interface: kolla1のNICを設定(ダミー)

OpenContrail-Kolla/kolla-ansible/etc/kolla/passwords.ymlの修正

各種コンポーネントのパスワードが設定されています。(デフォルトではcontrail1)
パスワードを変更したい場合はこのファイルを変更してください

OpenContrail-Kolla/kolla-ansible/ansible/inventory/multinodeの修正

[control] [network] [compute] [monitoring] [storage]の項目を修正してください。以下の例ではホスト名になっていますが、ホスト名を使う場合、IPアドレスが引けることが条件です。
[control]
kolla1
[network]
kolla1
[compute]
kolla3
kolla4
[monitoring]
kolla1
[storage]
kolla1

Contrailの設定ファイルの変更

OpenContrail-Kolla/contrail-ansible/playbooks/inventory/my-inventory/hostsの修正

[contrail-controllers] [contrail-analytics] [contrail-compute] [openstack-controllers]の項目を修正してください。ホスト名を設定すると動作しないので必ずIPアドレスを設定してください。
[contrail-controllers]
10.84.50.118
[contrail-analyticsdb]
10.84.50.118
[contrail-analytics]
10.84.50.118
[contrail-compute]
10.84.50.119
10.84.50.120
[openstack-controllers]
10.84.50.117

OpenContrail-Kolla/contrail-ansible/playbooks/inventory/my-inventory/group_vars/all.yml の修正

以下の5項目を修正します
ansible_ssh_private_key_file: ~/.ssh/id_rsa
global_config: { external_rabbitmq_servers: 10.84.50.117 }
rabbitmq_config: { user: openstack, password: contrail1 }
keystone_config: {ip: 10.84.50.117, admin_password: contrail1, auth_protocol: http}
vrouter_physical_interface: ens3
  • ansible_ssh_private_key_file:証明書のログインを指定(コメントアウトを外す)
  • global_config: RabbitMQのアドレスを設定。
  • rabbitmq_config: RabbitMQのパスワードを設定。passwords.ymlを変更した場合はここも変更
  • keystone_config: KeysoneにアクセスするAdminパスワードを設定。passwords.ymlを変更した場合はここも変更
  • vrouter_physical_interface: ContrailのvRouterが使用するNICを設定。ComputeノードごとにNIC名が違う場合はhostsに個別に設定。

3.インストール

Openstackインストールの事前準備

依存ファイルのインストールとAnsible作業時にssh keyを無視する変数をExport
ssh -t root@10.84.50.117 'apt-get -y install python-oslo-config'
export ANSIBLE_HOST_KEY_CHECKING=False

Openstackのインストール

cd OpenContrail-Kolla/kolla-ansible/ansible/
ansible-playbook -i inventory/multinode -e @../etc/kolla/globals.yml -e @../etc/kolla/passwords.yml -e action=bootstrap-servers kolla-host.yml
ansible-playbook -i inventory/multinode -e @../etc/kolla/globals.yml -e @../etc/kolla/passwords.yml -e action=deploy site.yml

OpenContrailのインストールの事前準備

Dockerのインストール
ssh -t root@10.84.50.118 'curl -sSL https://get.docker.io | bash'

OpenContrailのインストール

cd OpenContrail-Kolla/contrail-ansible/playbooks/
ansible -i inventory/my-inventory -m shell -a 'apt-get install -y ntp' all
ansible-playbook  -i inventory/my-inventory site.yml

compute nodeのリブート

ssh -t root@10.84.50.119 reboot
ssh -t root@10.84.50.120 reboot

4.インストール後作業

horizonのバグFix対応

docker exec -i horizon sudo sed -i -e 's:/usr/share/openstack-dashboard/static:/var/lib/openstack-dashboard/static:g' /etc/apache2/conf-enabled/000-default.conf
docker exec -i horizon /usr/share/openstack-dashboard/manage.py collectstatic --noinput
docker exec -i horizon /usr/share/openstack-dashboard/manage.py compress
docker exec -i horizon sudo service apache2 reload

openstackrc の作成

echo 'export OS_USERNAME=admin
export OS_PASSWORD=contrail1
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://10.84.50.117:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2' > openstackrc

Openstack clientのインストール

pip install python-openstackclient

flavorの作成

source openstackrc
openstack flavor create --id 1 --disk 1 --ram 512 --vcpus 1 --public m1.tiny
openstack flavor create --id 2 --disk 20 --ram 2048 --vcpus 1 --public m1.small
openstack flavor create --id 3 --disk 40 --ram 4096 --vcpus 2 --public m1.medium
openstack flavor create --id 4 --disk 80 --ram 8192 --vcpus 2 --public m1.large
openstack flavor create --id 5 --disk 160 --ram 16384 --vcpus 4 --public m1.xlarge

5.動作確認

openstack network listを発行し、以下のように3つのネットワークが返ってきたらOpenstackとOpenContrailの設定は終了です。
+--------------------------------------+-------------------------+--------------------------------------+
| ID                                   | Name                    | Subnets                              |
+--------------------------------------+-------------------------+--------------------------------------+
| a5432e6b-0155-4b13-abe8-e6290f6dc9fe | __link_local__          |                                      |
| 5a58e2d9-88b1-4ff2-9e0f-e0ed5e4e72ce | default-virtual-network |                                      |
| 65549c94-5ffc-4b30-9025-00a54813a695 | ip-fabric               |                                      |
+--------------------------------------+-------------------------+--------------------------------------+

次回、OpenContrail管理外に接続するためのSimple Gatewayの設定と動作確認を紹介します。

参考リンク
https://gitlab.com/gokulpch/OpenContrail-Kolla/blob/master/README.md

2016年4月19日火曜日

Contrail R3.0のマニュアルインストール ubuntu編(12)

Contrailの動作確認

Contrailの動作確認を行います。

1.Controllerの確認
contrail-statusコマンドを実行し、Contrailが正常動作しているか確認します。
状態が、Active又は、Backupになっていれば問題ありません。
** contrail-device-manager,contrail-schema,contrail-svc-monitorは3台中1台がActiveになります。
== Contrail Control ==
supervisor-control:           active
contrail-control              active              
contrail-control-nodemgr      active              
contrail-dns                  active              
contrail-named                active              

== Contrail Analytics ==
supervisor-analytics:         active
contrail-alarm-gen            active              
contrail-analytics-api        active              
contrail-analytics-nodemgr    active              
contrail-collector            active              
contrail-query-engine         active              
contrail-snmp-collector       active              
contrail-topology             active              

== Contrail Config ==
supervisor-config:            active
contrail-api:0                active              
contrail-config-nodemgr       active              
contrail-device-manager       backup              
contrail-discovery:0          active              
contrail-schema               active              
contrail-svc-monitor          backup              
ifmap                         active              

== Contrail Web UI ==
supervisor-webui:             active
contrail-webui                active              
contrail-webui-middleware     active              

== Contrail Database ==
contrail-database:            active
supervisor-database:          active
contrail-database-nodemgr     active              
kafka                         active              

== Contrail Support Services ==
supervisor-support-service:   active
rabbitmq-server               active    

2.vRouterの確認
同様にcontrail-statusを実行し、Activeか確認します。
== Contrail vRouter ==
supervisor-vrouter:           active
contrail-vrouter-agent        active              
contrail-vrouter-nodemgr      active  

3.WebUIの確認
Webブラウザからhttp://Contrail1:8080/にアクセスし、adminユーザーでログインします。
ダッシュボードに各ノードの数が表示されます。
エラーが表示されていなければContrailの動作確認は終了です。
実際に仮想ネットワークや、仮想マシンを立てて通信してください。



Contrail R3.0のマニュアルインストール ubuntu編(11)

Compute Nodeの設定

Compute Nodeの設定をします。
Nova Computeの設定は色々とありますが、ここでは簡単な設定のみ行います。もし、ContrailのLocal repository以外のNova Computeを利用したい場合は、Contralのパッケージをインストールする前にNova Computeをインストールしておくことをお勧めします。
**対象サーバ Compute1

1.変数の設定
HOST=10.84.50.135  ## インストール対象サーバのIPアドレスを指定
OPENSTACK=10.84.50.134  ## Openstack ServerのIPアドレスを指定
IVIP=10.84.50.139  ## Control/Dataの仮想IPアドレスを指定
DEV=p514p2  ## Control/Data用の物理NIC名
MAC=90:e2:ba:a1:aa:e1  ## Control/Data用の物理NICのMACアドレス
DGW=10.84.50.252  ## Control/Data用のデフォルトゲートウェイ。このルーティングはLinux Kernelでは使用しません。

2.Nova Computeパッケージのインストール
apt-get update
apt-get install -y nova-compute sysfsutils

3./etc/nova.confの修正
echo "[DEFAULT]
dhcpbridge_flagfile=/etc/nova/nova.conf
dhcpbridge=/usr/bin/nova-dhcpbridge
logdir=/var/log/nova
state_path=/var/lib/nova
lock_path=/var/lock/nova
force_dhcp_release=True
libvirt_use_virtio_for_bridges=True
verbose=True
ec2_private_dns_show_ip=False
api_paste_config=/etc/nova/api-paste.ini
enabled_apis=ec2,osapi_compute,metadata
rabbit_host = $OPENSTACK
security_group_api = neutron
service_neutron_metadata_proxy = True
compute_driver = libvirt.LibvirtDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver
novncproxy_port = 5999
novncproxy_host = 0.0.0.0
auth_strategy = keystone
network_api_class = nova.network.neutronv2.api.API
novncproxy_base_url = http://$OPENSTACK:6080/vnc_auto.html
vncserver_enabled = true
vncserver_listen = $HOST
vncserver_proxyclient_address = $HOST

[keystone_authtoken]
admin_tenant_name = service
admin_user = nova
admin_password = password
auth_protocol = http
auth_host = $OPENSTACK
auth_port = 35357
signing_dir = /tmp/keystone-signing-nova

[neutron]
admin_auth_url = http://$OPENSTACK:35357/v2.0/
admin_username = neutron
admin_password = password
admin_tenant_name = service
url = http://$IVIP:9696/
url_timeout = 300
service_metadata_proxy = True

[compute]
compute_driver = libvirt.LibvirtDriver

[glance]
host = $OPENSTACK" > /etc/nova.conf

4./etc/libvirt/qemu.confの修正
echo 'cgroup_device_acl = [
    "/dev/null", "/dev/full", "/dev/zero",
    "/dev/random", "/dev/urandom",
    "/dev/ptmx", "/dev/kvm", "/dev/kqemu",
    "/dev/rtc", "/dev/hpet","/dev/net/tun",
]' >> /etc/libvirt/qemu.conf

5.Contrail vRouterパッケージのインストール
Linux Kernelが3.13.0-40以外の場合
apt-get -y install contrail-openstack-vrouter contrail-vrouter-dkms contrail-vrouter-common contrail-nova-vif
Linux Kernelが3.13.0-40の場合
apt-get -y install contrail-openstack-vrouter contrail-vrouter-3.13.0-40-generic contrail-vrouter-common contrail-nova-vif

6./etc/contrail/vrouter_nodemgr_paramの修正
echo "DISCOVERY=$IVIP" > /etc/contrail/vrouter_nodemgr_param

7./etc/contrail/agent_paramの修正
echo "LOG=/var/log/contrail.log
CONFIG=/etc/contrail/contrail-vrouter-agent.conf
prog=/usr/bin/contrail-vrouter-agent
kmod=vrouter
pname=contrail-vrouter-agent
LIBDIR=/usr/lib64
DEVICE=vhost0
dev=$DEV
LOGFILE=--log-file=/var/log/contrail/vrouter.log" > /etc/contrail/agent_param

8./etc/contrail/contrail-vrouter-agent.confの修正
sed -i -e "/^\[DISCOVERY\]/i platform=default" /etc/contrail/contrail-vrouter-agent.conf
sed -i -e "/^\[DISCOVERY\]/i physical_interface_mac=$MAC" /etc/contrail/contrail-vrouter-agent.conf
sed -i "s/# server=127.0.0.1/server=$IVIP/g" /etc/contrail/contrail-vrouter-agent.conf
sed -i "s/# max_control_nodes=1/max_control_nodes=2/g" /etc/contrail/contrail-vrouter-agent.conf
sed -i "s/# type=kvm/type=kvm/g" /etc/contrail/contrail-vrouter-agent.conf
sed -i "s/# control_network_ip=/control_network_ip=$HOST/g" /etc/contrail/contrail-vrouter-agent.conf
sed -i "s/# name=vhost0/name=vhost0/g" /etc/contrail/contrail-vrouter-agent.conf
sed -i "s/# ip=10.1.1.1/24/ip=$HOST/24/g" /etc/contrail/contrail-vrouter-agent.conf
sed -i "s/# gateway=10.1.1.254/gateway=$DGW/g" /etc/contrail/contrail-vrouter-agent.conf
sed -i "s/# physical_interface=vnet0/physical_interface=$DEV/g" /etc/contrail/contrail-vrouter-agent.conf
sed -i "s/# thread_count = 4/thread_count = 4/g" /etc/contrail/contrail-vrouter-agent.conf

9./etc/network/interfacesの修正
vRouterはControl/Dataで使用する物理NICをvhost0にバインドします。このため、物理インターフェイスにはIPアドレスを振らずに、vhost0にアドレスを振ります。
以下のコマンドを実行して、/etc/network/interfaceにコピペしてください。
echo "auto $DEV
iface $DEV inet manual
    pre-up ifconfig $IDEV up
    post-down ifconfig $IDEV down


auto vhost0
iface vhost0 inet static
    pre-up /opt/contrail/bin/if-vhost0
    netmask 255.255.255.0
    network_name application
    address $HOST
    gateway $DGW
    dns-nameservers 8.8.8.8"

10./etc/contrail/contrail-vrouter-nodemgr.confの修正
echo "[DISCOVERY]
server=$IVIP
port=5998" >> /etc/contrail/contrail-vrouter-nodemgr.conf

11.ComputeNodeのリブート
Compute Nodeをリブートします。

12.ContrailへComputeNodeを追加
WebUIを開き"Configure"->"Infrastructure"->"Virtual Routers"を開き、"+"をクリックします。
以下のようなダイアログが開くので、"Name"にCompute Nodeのホスト名"IP Address"にCompute Nodeのvhost0のIPアドレスを入力します。

これで設定は終了です。
次は動作確認です。