Contenu connexe
Similaire à OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料 (20)
Plus de Etsuji Nakai (20)
OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料
- 2. OpenStack Quantum LinuxBridge Plugin
自己紹介
中井悦司(なかいえつじ)
– Twitter @enakai00
日々の仕事
– Senior Solution Architect and
Cloud Evangelist at Red Hat K.K. 好評発売中
企業システムでオープンソースの活用を希望される
お客様を全力でご支援させていただきます。
昔とった杵柄
– 素粒子論の研究(超弦理論とか)
– 予備校講師(物理担当)
– インフラエンジニア(Unix/Linux専門)
Open Cloud Campus
2
- 4. OpenStack Quantum LinuxBridge Plugin
物理ネットワーク構成とQuantum Agentの配置
L2 AgentはPluginを選択可能
ここでは、LinuxBridge Pluginを使用
パブリック
ネットワーク
管理ネットワーク
インスタンスが
仮想ルータが 起動するノード
構成されるノード
eth0 eth2 eth0 eth0
Network Node
Quantum Server Compute Node Compute Node
L2 Agent L2 Agent
L2 Agent
DHCP Agent
L3 Agent
Quantum Serverは eth1 eth1 eth1
別ノードに外出しも可能
プライベートネットワーク
Open Cloud Campus
4
- 5. OpenStack Quantum LinuxBridge Plugin
この資料で説明する仮想ネットワークの論理構成
特定テナント専用の
ネットワークも用意可能
インスタンスごとに接続する
プライベートネットワークを選択
パブリックネットワークとの (複数選択可能)
通信はNATを使用
ファイアウォール機能付き
NATルータ
パブリック
ネットワーク 異なるサブネットからの通信は
セキュリティグループでフィルタリング
net01 net02
プライベートネットワーク プライベートネットワーク
(サブネット01) (サブネット02)
同一サブネット内の通信は
フィルタリングされない
Open Cloud Campus
5
- 6. OpenStack Quantum LinuxBridge Plugin
(参考)テナントごとに独立ネットワークを提供する構成例
テナントごとにIPアドレスの範囲を自由に設定可能で、テナント間でIPアドレス
が重複しても問題になりません。
下図の「サブネット」は、テナントごとに自由に追加することができます。
パブリック
ネットワーク
テナント外との通信はNATで行う
テナントA テナントB
専用ルータ 専用ルータ
サブネット1 サブネット2 サブネット1 サブネット2
192.168.1.0/24 192.168.2.0/24 192.168.1.0/24 192.168.2.0/24
Open Cloud Campus
6
- 8. OpenStack Quantum LinuxBridge Plugin
Compute Nodeの完成形
Nova Computeが構成
vm01 vm02 vm03
IP IP IP IP
eth0 eth0 eth1 eth0
Network Node上の
dnsmasqからIPを割り当て tapXXX tapXXX tapXXX tapXXX
brqxxxx brqxxxx
net01 net02
プライベートネットワーク eth1.101 eth1.102
ごとにVLANデバイスを構成
eth1 L2 Agentが構成
プライベートネットワーク用 VLAN101
L2スイッチ
VLAN102
Open Cloud Campus
8
- 9. OpenStack Quantum LinuxBridge Plugin
Network Nodeの完成形 パブリックネットワークへ
L3 Agentが構成 eth0
tapVVV brqxxxx
iptablesで
NAT&フィルタリング IP
qg-VVV
dnsmasq dnsmasq
サブネットごとに
dnsmasqが起動
IP IP IP IP
ns-XXX qr-YYY ns-ZZZ qr-WWW
ここはvethで直結
(TAPデバイスではない)
tapXXX tapYYY tapZZZ tapWWW
DHCP Agentが構成
brqxxxx brqxxxx
net01 net02
eth1.101 eth1.102
eth1 L2 Agentが構成
プライベートネットワーク用スイッチへ Open Cloud Campus
9
- 11. OpenStack Quantum LinuxBridge Plugin
Compute Nodeにおけるパケットフィルタリング
filter table インスタンスに対する
パケットフィルタリングは
各Compute Nodeで実施
FORWARD
nova-filter-top
インスタンス個別に
nova-compute-local フィルタリングチェーンを用意
nova-compute-inst-xx 同じサブネットからは
無条件に通信可能
nova-compute-provider
Security Groupの
同じサブネットからのパケット ACCEPT 適用はココ
Security Groupによるフィルタ ACCEPT
nova-compute-sg-fallback DROP
nova-compute-FORWARD
※ これらはNova Computeが設定します。
ACCEPT
(Security GroupはNovaの機能)
Open Cloud Campus
11
- 12. OpenStack Quantum LinuxBridge Plugin
Network NodeにおけるNAT処理 (1/2)
パブリックネットワーク接続時の
nat table POSTROUTING NAT処理はNetwork Nodeで実施
quantum-l3-agent-POSTROUTING
パブリックNWとの出入り以外 ACCEPT
quantum-postrouting-bottom パブリックNWに出入りする
タイミングでNATを適用
quantum-l3-agent-snat
送信元IPを仮想ルータの
quantum-l3-agent-float-snat パブリックIPに変換
Floating IPからの送信 SNAT
プライベートNWからの送信 SNAT
nova-api-POSTROUTING 送信元IPを対応する
Floating IPに変換
nova-api-postrouting-bottom
※ これらは主にL3 Agentが設定します。
ACCEPT
Open Cloud Campus
12
- 13. OpenStack Quantum LinuxBridge Plugin
Network NodeにおけるNAT処理 (1/2)
nat table
PREROUTING
quantum-l3-agent-PREROUTING
Floating IP宛の受信 DNAT
nova-api-PREROUTING
宛先IPをFloating IPから
対応するプライベートIPに変換
ACCEPT
※ これらは主にL3 Agentが設定します。
Open Cloud Campus
13
- 16. OpenStack Quantum LinuxBridge Plugin
プラベートネットワークの定義
プラベートネットワークとサブネットを定義すると、Network Node上で次の構成が行われ
ます。(Compute Nodeでは、まだ何も行われません。)
– プライベートネットワーク用ブリッジ brxxxxを作成
– プラベートネットワーク用の物理NIC上のVLANデバイスethX.XXXを作成して、ブリッジに接続
– vethで直結された仮想NICペア [tapXXXX --- ns-XXXX] を作成して、tapXXXXをブリッジに接続
– nsXXXXにIPを割り当てて、これをListenインターフェースとするdnsmasqを起動
# tenant=$(keystone tenant-list|awk '/redhat/ {print $2}')
# quantum net-create --tenant-id $tenant net01 --provider:network_type vlan
--provider:physical_network physnet2 --provider:segmentation_id 101
# quantum subnet-create --tenant-id $tenant --name subnet01 net01 192.168.101.0/24
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.101.0 0.0.0.0 255.255.255.0 U 0 0 0 ns-ca045488-1e
・・・
# ip addr show ns-ca045488-1e
20: ns-ca045488-1e: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
vethで直結
link/ether e6:3b:bd:07:11:42 brd ff:ff:ff:ff:ff:ff
inet 192.168.101.2/24 brd 192.168.101.255 scope global ns-ca045488-1e
・・・
# brctl show
bridge name bridge id STP enabled interfaces
brq6c6cc680-a8 8000.e89a8fbe1f79 no eth1.101
tapca045488-1e
# ps -ef | grep dnsmasq
nobody 14920 1 0 15:22 ? 00:00:00 /usr/sbin/dnsmasq --no-hosts --no-resolv --strict-order
--bind-interfaces --interface=ns-ca045488-1e --except-interface=lo --domain=openstacklocal --pid-
file=/var/lib/quantum/dhcp/6c6cc680-a8fc-4f96-a8ae-1e88eabffec3/pid ・・・
Open Cloud Campus
16
- 17. OpenStack Quantum LinuxBridge Plugin
パブリックネットワークの定義とルータ接続
パブリックネットワークは定義しただけでは、実際の構成は何も行われません。
# tenant=$(keystone tenant-list|awk '/service/ {print $2}')
# quantum net-create --tenant-id $tenant public01 --provider:network_type flat
--provider:physical_network physnet1 --router:external=True
# quantum subnet-create --tenant-id $tenant --name pub_subnet01 --gateway 10.64.201.254
public01 10.64.201.0/24 --enable_dhcp False
仮想ルータの外部ゲートウェイにパブリックネットワークを指定すると、Network Node上
で次の構成が行われます。
– パブリックネットワーク用ブリッジ brxxxxを作成して、パブリックネットワークの物理NICを接続
– vethで直結された仮想NICペア [tapXXXX --- qg-XXXX] を作成して、tapXXXXをブリッジに接続
– qgXXXXにIPを割り当てて、これをパブリックネットワーク接続用にルーティングテーブルを構成
# quantum router-gateway-set router01 public01
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
・・・
0.0.0.0 10.64.201.254 0.0.0.0 UG 0 0 0 qg-3faf6516-c1
# ip addr show qg-3faf6516-c1
32: qg-3faf6516-c1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
vethで直結
link/ether 4a:d4:a3:46:12:5c brd ff:ff:ff:ff:ff:ff
inet 10.64.201.1/24 brd 10.64.201.255 scope global qg-3faf6516-c1
・・・
[root@opst01 work(keystone_admin)]$ brctl show
bridge name bridge id STP enabled interfaces
brq01092489-9f 8000.e89a8fbe1f78 no eth0
tap3faf6516-c1
・・・
Open Cloud Campus
17
- 18. OpenStack Quantum LinuxBridge Plugin
プライベートネットワークのルータ接続
プライベートネットワークを仮想ルータに接続すると、Network Node上で次の構成が行わ
れます。(Compute Nodeでは、まだ何も行われません。)
– vethで直結された仮想NICペア [tapXXXX --- qr-XXXX] を作成して、tapXXXXをブリッジに接続
– qr-XXXXにIPを割り当てる(プライベートネットワークのデフォルトゲートウェイに利用可能(*1))
– iptablesのnatテーブルにSNAT(Masquerade)接続用のエントリを作成
# quantum router-interface-add router01 subnet01
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.101.0 0.0.0.0 255.255.255.0 U 0 0 0 ns-ca045488-1e
192.168.101.0 0.0.0.0 255.255.255.0 U 0 0 0 qr-0339046d-b6
・・・
# ip addr show qr-0339046d-b6
35: qr-0339046d-b6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether aa:06:4e:fb:5c:86 brd ff:ff:ff:ff:ff:ff
vethで直結
inet 192.168.101.1/24 brd 192.168.101.255 scope global qr-0339046d-b6
・・・
# brctl show
bridge name bridge id STP enabled interfaces
・・・
brq6c6cc680-a8 8000.e89a8fbe1f79 no eth1.101
tap0339046d-b6
tapca045488-1e
$ iptables -t nat -L quantum-l3-agent-snat -v
Chain quantum-l3-agent-snat (1 references)
pkts bytes target prot opt in out source destination
3 216 quantum-l3-agent-float-snat all -- any any anywhere anywhere
0 0 SNAT all -- any any 192.168.101.0/24 anywhere to:10.64.201.1
18 *1) dnsmasqを使用する場合は、実際には、dnsmasq用のポートns-XXXXがゲートウェイになります。 Open Cloud Campus
- 19. OpenStack Quantum LinuxBridge Plugin
インスタンスの起動
インスタンスを起動してプライベートネットワークに接続すると、該当インスタンスが起動
するCompute Node上で次の構成がおこなわれます。
– プライベートネットワーク用ブリッジ brxxxxを作成
– プラベートネットワーク用の物理NIC上のVLANデバイスethX.XXXを作成して、ブリッジに接続
– iptablesのfilterテーブルにdnsmasq接続/同一サブネット接続/Security Group用のエントリを作成
– Nova Computeが作成した仮想マシンのtapデバイスをブリッジに接続
# brctl show
bridge name bridge id STP enabled interfaces
brq6c6cc680-a8 8000.6aa83b0c369f no eth1.101
tap10007fbc-f2
# iptables -nL nova-compute-local -v
Chain nova-compute-local (1 references)
pkts bytes target prot opt in out source destination
0 0 nova-compute-inst-74 all -- * * 0.0.0.0/0 192.168.101.3
# iptables -nL nova-compute-inst-74 -v
Chain nova-compute-inst-74 (1 references)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state
RELATED,ESTABLISHED
0 0 nova-compute-provider all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT udp -- * * 192.168.101.2 0.0.0.0/0 udp spt:67 dpt:68
0 0 ACCEPT all -- * * 192.168.101.0/24 0.0.0.0/0
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
0 0 nova-compute-sg-fallback all -- * * 0.0.0.0/0 0.0.0.0/0
Open Cloud Campus
19
- 20. OpenStack Quantum LinuxBridge Plugin
Floating IPの割り当て
Floating Ipをインスタンスのポートに割り当てると、Network Node上で次の構成がおこな
われます。
– iptablesのnatテーブルにFloating IPに対応するDNAT/SNATのエントリを作成
# tenant=$(keystone tenant-list|awk '/redhat/ {print $2}')
# quantum floatingip-create --tenant-id $tenant public01
# quantum floatingip-associate a56c9247-6155-418f-b418-650ac021743f 10007fbc-f2e5-4688-9979-9acfd253b444
# iptables -t nat -nL quantum-l3-agent-float-snat -v
Chain quantum-l3-agent-float-snat (1 references)
pkts bytes target prot opt in out source destination
0 0 SNAT all -- * * 192.168.101.3 0.0.0.0/0 to:10.64.201.4
# iptables -t nat -nL quantum-l3-agent-OUTPUT -v
Chain quantum-l3-agent-OUTPUT (1 references)
pkts bytes target prot opt in out source destination
0 0 DNAT all -- * * 0.0.0.0/0 10.64.201.4 to:192.168.101.3
Open Cloud Campus
20
- 23. OpenStack Quantum LinuxBridge Plugin
参考資料
KVM勉強会!
– http://www.slideshare.net/enakai/ljstudy-kvm
Eucalyputsの仮想ネットワーク構成
– http://cloud.watch.impress.co.jp/docs/column/euca_iaas/20110817_466963.html
OpenStack Network (Quantum) Administration Guide
– http://docs.openstack.org/trunk/openstack-network/admin/content/index.html
Quantum L2 Linux Bridge Plugin
– http://wiki.openstack.org/Quantum-Linux-Bridge-Plugin
QuickStart with RHOS(Red Hat OpenStack) Folsom Preview
– http://d.hatena.ne.jp/enakai00/20121118/1353226066
Open Cloud Campus
23