ひととおりコンポーネントの設定が終わったところで、ネットワークの作成を行います。
ここは組みたい構成によってちょこちょこ内容が変わるので、1つの参考にしていただけると。
構成について
絵は面倒くさいので箇条書きで説明します。今回の構成・運用で重要なポイントは、いわゆるFloatingIPはVMに割り当てないというところです。外部ネットワークは外部との通信を行なうためのG/Wに過ぎません。その代わり、外部からVMへの接続は、NovaSecurityさえ通せばNamespaceを介さずに通る経路設定にしています。
当初は複数ルータにしてみたり色々挑戦したのですが、複数ルータが難しかったり、(言い訳がましいですが)実際の運用を考慮するとルータは1つで十分だったりしたので、このような構成になりました。
管理プロジェクト用ネットワーク作成
ここでいう管理プロジェクトとは、adminプロジェクトのことをさしています。adminプロジェクトは運用時はほぼ触りませんが、外部ネットワークを保持させたり、VMイメージを保管したりと重要な役割を持たせて運用しています。プロジェクト
プロジェクトIDを変数に格納しておきます。
1 2 |
tenant_name=admin tenant_id=$(keystone tenant-list | grep -v invisible | grep " $tenant_name " | awk '{print $2}') |
ルータ作成
最も重要なルータを作成しますが、quantum router-create で作った段階ではLinux Network Namespace(ip netns)ができません。netnsがないと続き何をしても動かないので、quantum-l3-agent restart を実行してnetnsができるのを確認します。reboot時は問題なく作成されるので、軽いバグということで。
1 2 3 4 5 6 7 8 9 |
# ルータを作成して確認 router_name=admin-router-01 quantum router-create --tenant-id $tenant_id $router_name quantum router-list # l3-agentを再起動してRouteIDと同じ名前のNamespaceができるのを確認 # 新しいnetnsができるまで数秒かかります /etc/init.d/quantum-l3-agent restart ip netns |
内部ネットワーク作成
ネットワーク、サブネットと作って、ルータに紐付けます。ネットワーク
1 2 3 4 5 6 7 8 9 10 11 12 |
# 変数に格納して net_name=admin-private-01 # 作ります # 各値は、Open vSwitchの設定 ovs_quantum_plugin.ini で設定済みです quantum net-create \ --tenant-id $tenant_id $net_name \ --provider:network_type vlan --provider:physical_network physnet2 \ --provider:segmentation_id 1001 # 自動で表示されますが、手動で確認する場合 quantum net-list |
サブネット
ちょっとしたメモです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# 名前決めて subnet_name=admin-private-01-subnet-01 # レンジとDNSを指定して作成 quantum subnet-create \ --tenant-id $tenant_id --name $subnet_name \ --allocation-pool start=172.30.0.10,end=172.30.2.250 \ $net_name 172.30.0.0/22 \ --dns_nameservers list=true 10.1.10.248 10.1.10.249 # 確認 quantum subnet-list quantum port-list -c fixed_ips -c device_owner # Namespaceのために再起動 # 新しいnetnsができるまで数秒かかります /etc/init.d/quantum-dhcp-agent restart ip netns |
ルータと内部ネットワークを紐付け
quantum router-interface-add を実行すると、Namespace内のルーティングに-net 172.30.0.0/22 gw 0.0.0.0 が作成されます。
1 2 3 4 5 6 7 8 9 |
# 紐付け quantum router-interface-add $router_name $subnet_name # Namespaceのルーティングを確認。追加されるまで数秒かかります ip netns exec qrouter-$(quantum router-list | grep " $router_name " | awk '{print $2}' ) route -n # subnetのG/Wにpingが飛ぶのを確認 ip netns exec qrouter-$(quantum router-list | grep " $router_name " | awk '{print $2}' ) \ ping 172.30.0.1 |
外部ネットワーク
全プロジェクトが共有する外部ネットワークを、adminプロジェクトに作成します。ネットワーク
1 2 3 4 5 6 7 8 9 10 11 12 |
# 名前決めて net_name=admin-public-01 # 作成します # 外部用なので --router:external=True をつけます # vlanは不要なので network_type は flat にしています quantum net-create --tenant-id $tenant_id $net_name \ --router:external=True \ --provider:network_type flat --provider:physical_network physnet1 # 確認 quantum net-list |
サブネット
今回はFloatingIPはVMに割り当てませんが、必要に応じてネットワーク範囲を決めます。DHCPは不要なのでFalseにしています。
1 2 3 4 5 6 7 8 9 10 11 |
# 名前決めて subnet_name=admin-public-01-subnet-01 # 作成 quantum subnet-create \ --tenant-id $tenant_id --name $subnet_name \ $net_name 10.1.26.128/28 \ -- --enable_dhcp False # 確認 quantum subnet-list |
ゲートウェイ
ルータのG/Wに設定します。こうすることで、NamespaceのDefaultG/Wにルーティングが追加されるので、外部ネットワークへの経路が通ることになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# これでルータへの登録、DefaultG/Wの追加がされます quantum router-gateway-set $router_name $net_name # 確認 quantum router-list quantum port-list -c fixed_ips -c device_owner # Namespaceのルーティングを確認 ip netns exec qrouter-$(quantum router-list | grep " $router_name " | awk '{print $2}' ) route -n # ルータG/WへのPingを確認 ip netns exec qrouter-$(quantum router-list | grep " $router_name " | awk '{print $2}' ) \ ping 10.1.26.130 |
ホストOSとVMの経路
外部ネットワークのG/WとなっているIPアドレスをControllerに割り当て、VMネットワークへの経路をルータG/Wに送ることで、内外部を疎通します。
/etc/network/if-pre-up.d/openstack
1 2 3 4 5 |
#!/bin/bash ip addr add 10.1.26.129/28 dev br-ex route add -net 172.30.0.0/16 gw 10.1.26.130 |
実行しておきます(OS起動時は自動で実行されます)。
1 2 3 4 5 |
chmod +x /etc/network/if-pre-up.d/openstack /etc/network/if-pre-up.d/openstack # Namespaceを通さずにPingを確認 ping 172.30.0.1 |
OpenStackと全く関係ないところからVMに接続したい場合、ルータG/Wに対してFORWARD&ルーティングするとNamespace関係なしに綺麗に利用できます。ControllerNodeの通常のStaticAddressに対してルーティングすると、一見動きますが、VM -> 外部サーバ への通信で復路が返ってこなかったりと不安定になるので注意が必要です。
一般プロジェクト用ネットワーク
ルータ、外部ネットワークは作らず、外部接続はadminプロジェクトのルータにおんぶにだっこです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# プロジェクトID tenant_name=test tenant_id=$(keystone tenant-list | grep -v invisible | grep " $tenant_name " | awk '{print $2}') # ルータ名 router_name=admin-router-01 # 内部ネットワーク net_name=test-private-01 quantum net-create \ --tenant-id $tenant_id $net_name \ --provider:network_type vlan --provider:physical_network physnet2 \ --provider:segmentation_id 1002 # 内部サブネット subnet_name=test-private-01-subnet-01 quantum subnet-create \ --tenant-id $tenant_id --name $subnet_name \ --allocation-pool start=172.30.4.10,end=172.30.6.250 \ $net_name 172.30.4.0/22 \ --dns_nameservers list=true 10.1.10.248 10.1.10.249 quantum subnet-list # netnsを作成させる /etc/init.d/quantum-dhcp-agent restart ip netns # ルータに紐付け quantum router-interface-add $router_name $subnet_name # Namespaceを通さずping確認 ping 172.30.4.1 |
VM作成
あとはHorizonでVMを作成し色々確認します。ネットワーク周りは一度崩れると、いったん全部削除して作りなおすハメになったりします。
安定して運用に入るために、理解・納得いくまでキッチリやっておくべきことろだと思います。
私は何十回、丸ごと作りなおしたかわかりません・・・大変だったなぁ・・・しみじみ。