2014年10月23日木曜日

OpenContrailのtestbed.pyの書き方2

前回、シングル構成のtestbed.pyの書き方を初回しました。今回はOpenstack,コントローラと、コンピュートノードを別のサーバにインストールする方法を紹介します。
テンプレートは前回同様testbed_singlebox_example.pyを利用します。
今回はhost1をコントローラ、host2をコンピュートノードとしています。コンピュートノードを増やす場合host3,host4を作成して追加すればfabスクリプトでインストールされます。

前回同様testbed_singlebox_example.pyをコピーしたらファイルを開き、以下の部分を編集。
インストール元となる作業サーバはhost1です。
host1 = 'root@1.1.1.1'
host2 = 'root@1.1.1.2'
複数台構成のためhost2を追加、'1.1.1.1''1.1.1.2'をインストールするサーバのIPアドレスに変更する。
host_build = 'root@1.1.1.1'
1.1.1.1をインストールするサーバのIPアドレスに変更する。
ここはインストールするサーバの設定なので、host2は設定しない。
env.roledefs = {
    'all': [host1,host2],
    'cfgm': [host1],
    'openstack': [host1],
    'control': [host1],
    'compute': [host2],
    'collector': [host1],
    'webui': [host1],
    'database': [host1],
    'build': [host_build],
    'storage-master': [host1],
    'storage-compute': [host1],
}
'all'host2を追加し、computeをhost2に変更する。
env.hostnames = {
    'all': ['a0s1','a0s2']
}
hostnamesにhost2のホスト名を追加。
env.openstack_admin_password = 'secret123'
KeystoneのAdminパスワードを入力。このパスワードでHorizonやContrailのGuiにアクセスする。
env.password = 'secret'
env.passwords = {
    host1: 'secret',
    host2: 'secret',
    host_build: 'secret',
}
Host2にもインストールするため、Host2のパスワードを追加。
env.ostypes = {
    host1: 'centos',
    host2: 'centos',
}
host2の行を追加。このOS Typeはリイメージで使用するため、現時点でのOS種別はcentosでもubuntuでもインストールに問題ありません。

複数台構成のtestbed.pyのサンプルはこちら

2014年10月22日水曜日

OpenContrailのtestbed.pyの書き方1

Contrailのインストール方法はfabスクリプトによるインストール方法と、Contrail Server Managerの二通りがある。
Server ManagerはベースOSからインストールできるマネージャですが、今回はfabでのインストール方法を紹介します。

Fabではtestbed.pyというコンフィグファイルからContrailをプロビジョニングします。
OpenStack,Contrailコントローラ,コンピュートノードが自動設定できます。

今回は全てを1台にインストールする方法と、コントローラとコンピュートノードを別々にインストールします。
まず、Contrailのインストールパッケージをダウンロードし、展開します。
インストールパッケージは、OpenContrailWiki(https://sites.google.com/site/opencontrailwiki/)からdebパッケージをダウンロードできます。
ダウンロードしたら dpkg -i <ダウンロードしたパッケージ> で展開し、cd /opt/contrail/contrail_packages/ にある setup.shを実行します。このスクリプトは必要なファイルをOS上に展開します。

展開がおわったらtestbed.pyを作成しますが、雛形があるのでそれを利用します。

シングル構成用のテンプレートは/opt/contrail/utils/fabfile/testbeds/testbed_singlebox_example.py です。同一ディレクトリにtestbed.pyのファイル名でコピー。
コピーしたらファイルを開き、以下の部分を編集。
host1 = 'root@1.1.1.1'
シングル構成のためhost1のみでOK、1.1.1.1をインストールするサーバのIPアドレスに変更する。
host_build = 'root@1.1.1.1'
1.1.1.1をインストールするサーバのIPアドレスに変更する。fabを使うとリモートインストールが可能です。
env.roledefs =の部分はシングル構成の場合、テンプレートの変更は必要ありません。
次回、複数構成の際に解説します。
env.openstack_admin_password = 'secret123'
KeystoneのAdminパスワードを入力。このパスワードでHorizonやContrailのGUIにアクセスする。
env.password = 'secret' 
env.passwords = {
    host1: 'secret',
    host_build: 'secret',
}
secretをサーバのrootのパスワードに変更する。

変更したら、/opt/contrail/utils/ ディレクトリに移動し、fab install_contrailで全てのパッケージをインストールし、fab setup_allでコンフィグのセットアップを行う。
WikiからダウンロードしたR1.20パッケージの場合、必要ファイルが足りないので以下のパッケージをインストールた後にfab install_contrailを実行します。
wget http://security.ubuntu.com/ubuntu/pool/main/n/nspr/libnspr4_4.10.7-0ubuntu0.12.04.1_amd64.deb
wget https://launchpad.net/ubuntu/+source/boost1.54/1.54.0-2ubuntu3/+build/5098464/+files/libboost-system1.54.0_1.54.0-2ubuntu3_amd64.deb
wget https://launchpad.net/ubuntu/+source/boost1.54/1.54.0-2ubuntu3/+build/5098464/+files/libboost-thread1.54.0_1.54.0-2ubuntu3_amd64.deb
dpkg -i libnspr4_4.10.7-0ubuntu0.12.04.1_amd64.deb
apt-get install libnss3-1d
dpkg -i libboost-system1.54.0_1.54.0-2ubuntu3_amd64.deb
dpkg -i libboost-thread1.54.0_1.54.0-2ubuntu3_amd64.deb 
シングル構成のtestbed.pyのサンプルはこちら

2014年10月20日月曜日

OpenContrailのSNAT

NeutronではInternalネットワークからExternalネットワークに通信する場合、Neutron RouterがSNATして通信する。

例えば Internalネットワークが10.0.0.0/24でNeutron RouterのExternalネットワークのIPアドレスが203.0.113.1の場合、10.0.0.0/24のアドレスは203.0.113.1にNAT変換される。
ContrailではSNATをサポートしているが、ContrailではSNATを行う場合、Compute nodeにSNAT用のNetwork Namespaceを作成する。
このとき、Internal側のダミーIPネットワークを設定する。Neutron routerにゲートウェイを設定すると、自動的に100.64.0.0/29のネットワークが作成される。
このネットワークはNetwork NamespaceのInternal側に属するネットワークとして利用している。
なお、100.64.0.0/10はCGNAT(LSNAT)用で予約されている。RFC6598 http://tools.ietf.org/html/rfc6598

例えば、以下のようにネットワークを設定する。
VN1(10.0.1.0/24)--- Router1 ---pubric(172.16.0.0/24)
neutron net-create VN1
neutron subnet-create VN1 10.0.1.0/24
net-create public
subnet-create public 203.0.113.0/29
net-update public --router:external=true
router-gateway-set RT1 public
その後、neutron net-listでネットワークを確認すると、snat-si-left_si_"Neutorn routerのUUID"というネットワークが自動作成され、100.64.0.0/24のネットワークが自動生成される。
neutron router-list
+--------------------------------------+---------+--------------------------------------------------------+
| id                                   | name    | external_gateway_info                                  |
+--------------------------------------+---------+--------------------------------------------------------+
| 1e74907d-63e5-4bc6-a9a9-f0f221183f06 | Router1 | {"network_id": "8cd3510b-7b78-49f3-b5b9-2b94f5305a19"} |
+--------------------------------------+---------+--------------------------------------------------------+

neutron subnet-list
+--------------------------------------+------+---------------+------------------------------------------------+
| id                                   | name | cidr          | allocation_pools                               |
+--------------------------------------+------+---------------+------------------------------------------------+
| b354592d-3f85-45fa-b997-7853d10a5b93 |      | 10.0.1.0/24   | {"start": "10.0.1.2", "end": "10.0.1.254"}     |
| a8065593-158b-4057-af1b-d52faaeba18c |      | 172.16.0.0/24 | {"start": "172.16.0.2", "end": "172.16.0.254"} |
| f0510443-e4fb-43f7-b905-a766c49cef35 |      | 100.64.0.0/29 | {"start": "100.64.0.1", "end": "100.64.0.6"}   |
+--------------------------------------+------+---------------+------------------------------------------------+
コンピュートノードでip netns listを打つと、"vrouter-"で始まるnamespaceが作成されている
ip netns list
vrouter-2bd3ddf4-f7e5-4ba8-bdc6-95a810c06cb3
ip addrでインターフェイスを確認すると、namespaceのインターフェイスが確認できる
ip netns exec vrouter-2bd3ddf4-f7e5-4ba8-bdc6-95a810c06cb3 ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN
    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
2: int-479555b2-9:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 02:47:95:55:b2:92 brd ff:ff:ff:ff:ff:ff
    inet 100.64.0.5/29 brd 100.64.0.7 scope global int-479555b2-9
       valid_lft forever preferred_lft forever
3: gw-ef308f80-9d:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 02:ef:30:8f:80:9d brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.2/24 brd 172.16.0.255 scope global gw-ef308f80-9d
       valid_lft forever preferred_lft forever
2014/10/23追記
ip netns exec vrouter-2bd3ddf4-f7e5-4ba8-bdc6-95a810c06cb3 iptables -t nat -L をみると
ip netns exec vrouter-2bd3ddf4-f7e5-4ba8-bdc6-95a810c06cb3 iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination        

Chain INPUT (policy ACCEPT)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination        
MASQUERADE  all  --  anywhere             anywhere  
というMasquaradeするテーブルが作成されている。

つまりContrailは実際には以下のように動作している
VN1(10.0.1.0/24) --- NAT-inside(100.64.0.0/29) --- pubric(172.16.0.0/24)
   (vRouter)                 (Network namespace)           (vRouter) 

2014年10月14日火曜日

OpenContrailのcephパッケージ問題


OpenContrailのPackagingを使ってdebファイルを作っているが、Ceph関係の二つのファイルの代替パッケージが見つからなくてインストール時にこける。
 
 Github上のファイルは↓だけど、このパッケージはない。
librados2_0.80.4-2-g88f694d-1precise_amd64.deb
librbd1_0.80.4-2-g88f694d-1precise_amd64.deb

近いパッケージ↓だとインストール時にエラーになる
librados2_0.80.5-0ubuntu0.14.04.1_amd64.deb
librbd1_0.80.5-0ubuntu0.14.04.1_amd64.deb

OpenContrailをインストールする前に以下のファイルをインストールしておくことで、依存を回避できた。
インストール時に以下のパッケージを手動インストールすることで回避できた

apt-get install libnspr4-0d libnss3-1d

libboost-system1.54.0_1.54.0-2ubuntu3_amd64.deb
libboost-thread1.54.0_1.54.0-2ubuntu3_amd64.deb
dpkg -i libboost-system1.54.0_1.54.0-2ubuntu3_amd64.deb
dpkg -i libboost-thread1.54.0_1.54.0-2ubuntu3_amd64.deb


参考サイト
OpenContrail Wiki (自分で作ってるサイトだけど)
https://sites.google.com/site/opencontrailwiki/install_package_build/r1-10-branch-ubuntu

Github
https://github.com/Juniper/contrail-packaging/blob/R1.10/build/package_configs/ubuntu1204/havana/contrail_packages.cfg