Upload
etsuji-nakai
View
8.306
Download
8
Embed Size (px)
DESCRIPTION
Citation preview
OpenStack Quantum LinuxBridge Plugin
ver1.1 中井悦司Twitter @enakai00
オープンクラウド・キャンパス
OpenStackのQuantum(LinuxBridge Plugin)が
実際どうやって仮想ネットワークを
構成するのか説明する資料
Open Cloud Campus2
OpenStack Quantum LinuxBridge Plugin
自己紹介
中井悦司(なかいえつじ)– Twitter @enakai00
日々の仕事– Senior Solution Architect and
Cloud Evangelist at Red Hat K.K.企業システムでオープンソースの活用を希望されるお客様を全力でご支援させていただきます。
昔とった杵柄– 素粒子論の研究(超弦理論とか)– 予備校講師(物理担当)– インフラエンジニア(Unix/Linux専門)
好評発売中
Open Cloud Campus3
OpenStack Quantum LinuxBridge Plugin
前提環境
Open Cloud Campus4
OpenStack Quantum LinuxBridge Plugin
物理ネットワーク構成とQuantum Agentの配置
Network NodeQuantum Server
L2 AgentDHCP Agent
L3 Agent
eth0
パブリックネットワーク
eth1
Compute NodeL2 Agent
eth0
eth1
Compute NodeL2 Agent
eth0
eth1
eth2
管理ネットワーク
プライベートネットワーク
インスタンスが起動するノードインスタンスが起動するノード
Quantum Serverは別ノードに外出しも可能
L2 AgentはPluginを選択可能ここでは、LinuxBridge Pluginを使用
仮想ルータが構成されるノード
Open Cloud Campus5
OpenStack Quantum LinuxBridge Plugin
この資料で説明する仮想ネットワークの論理構成
インスタンスごとに接続するプライベートネットワークを選択
(複数選択可能)
パブリックネットワーク
net01 net02
ファイアウォール機能付きNATルータ
プライベートネットワーク(サブネット01)
プライベートネットワーク(サブネット02)
同一サブネット内の通信はフィルタリングされない
異なるサブネットからの通信はセキュリティグループでフィルタリング
パブリックネットワークとの通信はNATを使用
特定テナント専用のネットワークも用意可能
Open Cloud Campus6
OpenStack Quantum LinuxBridge Plugin
(参考)テナントごとに独立ネットワークを提供する構成例
テナントごとにIPアドレスの範囲を自由に設定可能で、テナント間でIPアドレスが重複しても問題になりません。
下図の「サブネット」は、テナントごとに自由に追加することができます。
パブリックネットワーク
サブネット1192.168.1.0/24
テナントA専用ルータ
サブネット2192.168.2.0/24
サブネット1192.168.1.0/24
テナントB専用ルータ
サブネット2192.168.2.0/24
テナント外との通信はNATで行う
Open Cloud Campus7
OpenStack Quantum LinuxBridge Plugin
まずは完成形を見てみましょう
Open Cloud Campus8
OpenStack Quantum LinuxBridge Plugin
vm01
Compute Nodeの完成形
eth0
vm02
tapXXX
eth0
vm03
eth0
brqxxxx
tapXXX
eth1.101 eth1.102
brqxxxx
tapXXX
eth1
tapXXX
L2 Agentが構成
Nova Computeが構成
net01 net02
IP IP IP
Network Node上のdnsmasqからIPを割り当て
VLAN101
VLAN102
プライベートネットワーク用L2スイッチ
プライベートネットワークごとにVLANデバイスを構成
eth1IP
Open Cloud Campus9
OpenStack Quantum LinuxBridge Plugin
Network Nodeの完成形
tapYYY
brqxxxx
tapXXX
eth1.101 eth1.102
brqxxxx
tapZZZ
eth1
tapWWW
L2 Agentが構成
net01 net02
ns-XXX qr-YYY
dnsmasq
IP IPns-ZZZ qr-WWW
dnsmasq
IP IP
ここはvethで直結(TAPデバイスではない)
DHCP Agentが構成
iptablesでNAT&フィルタリング
サブネットごとにdnsmasqが起動
プライベートネットワーク用スイッチへ
パブリックネットワークへ
tapVVV
qg-VVVIP
eth0
brqxxxx
L3 Agentが構成
Open Cloud Campus10
OpenStack Quantum LinuxBridge Plugin
iptablesによるフィルタリングとNATの設定内容
Open Cloud Campus11
OpenStack Quantum LinuxBridge Plugin
Compute Nodeにおけるパケットフィルタリング
FORWARD
nova-filter-top
nova-compute-local
nova-compute-inst-xx
nova-compute-provider
nova-compute-sg-fallback
nova-compute-FORWARD
DROP
ACCEPT同じサブネットからのパケット
ACCEPTSecurity Groupによるフィルタ
ACCEPT
filter table
同じサブネットからは無条件に通信可能
インスタンス個別にフィルタリングチェーンを用意
Security Groupの適用はココ
インスタンスに対するパケットフィルタリングは
各Compute Nodeで実施
※ これらはNova Computeが設定します。(Security GroupはNovaの機能)
Open Cloud Campus12
OpenStack Quantum LinuxBridge Plugin
Network NodeにおけるNAT処理 (1/2)
POSTROUTING
quantum-l3-agent-POSTROUTING
nova-api-POSTROUTING
ACCEPT
quantum-postrouting-bottom
nova-api-postrouting-bottom
quantum-l3-agent-snat
quantum-l3-agent-float-snat
ACCEPTパブリックNWとの出入り以外
SNATFloating IPからの送信
SNATプライベートNWからの送信
パブリックネットワーク接続時のNAT処理はNetwork Nodeで実施nat table
パブリックNWに出入りするタイミングでNATを適用
送信元IPを仮想ルータのパブリックIPに変換
送信元IPを対応するFloating IPに変換
※ これらは主にL3 Agentが設定します。
Open Cloud Campus13
OpenStack Quantum LinuxBridge Plugin
Network NodeにおけるNAT処理 (1/2)
PREROUTING
quantum-l3-agent-PREROUTING
nova-api-PREROUTING
ACCEPT
DNATFloating IP宛の受信
nat table
宛先IPをFloating IPから対応するプライベートIPに変換
※ これらは主にL3 Agentが設定します。
Open Cloud Campus14
OpenStack Quantum LinuxBridge Plugin
仮想ネットワークの構成手順にしたがって実際の構成の様子を追ってみましょう
Open Cloud Campus15
OpenStack Quantum LinuxBridge Plugin
仮想ルータの定義
仮想ルータは定義しただけでは、実際の構成は何も行われません。
# quantum router-create router01
Open Cloud Campus16
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 -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.101.0 0.0.0.0 255.255.255.0 U 0 0 0 ns-ca045488-1e・・・# ip addr show ns-ca045488-1e20: ns-ca045488-1e: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 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 showbridge name bridge id STP enabled interfacesbrq6c6cc680-a8 8000.e89a8fbe1f79 no eth1.101
tapca045488-1e# ps -ef | grep dnsmasqnobody 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 ・・・
veth
で直結
Open Cloud Campus17
OpenStack Quantum LinuxBridge Plugin
パブリックネットワークの定義とルータ接続
パブリックネットワークは定義しただけでは、実際の構成は何も行われません。
仮想ルータの外部ゲートウェイにパブリックネットワークを指定すると、Network Node上で次の構成が行われます。
– パブリックネットワーク用ブリッジ brxxxxを作成して、パブリックネットワークの物理NICを接続– vethで直結された仮想NICペア [tapXXXX --- qg-XXXX] を作成して、tapXXXXをブリッジに接続– qgXXXXにIPを割り当てて、これをパブリックネットワーク接続用にルーティングテーブルを構成
# 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
# quantum router-gateway-set router01 public01
# route -nKernel IP routing tableDestination 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-c132: qg-3faf6516-c1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 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 showbridge name bridge id STP enabled interfacesbrq01092489-9f 8000.e89a8fbe1f78 no eth0
tap3faf6516-c1・・・
veth
で直結
Open Cloud Campus18
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 -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.101.0 0.0.0.0 255.255.255.0 U 0 0 0 ns-ca045488-1e192.168.101.0 0.0.0.0 255.255.255.0 U 0 0 0 qr-0339046d-b6・・・# ip addr show qr-0339046d-b635: 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 inet 192.168.101.1/24 brd 192.168.101.255 scope global qr-0339046d-b6・・・# brctl showbridge name bridge id STP enabled interfaces・・・brq6c6cc680-a8 8000.e89a8fbe1f79 no eth1.101
tap0339046d-b6tapca045488-1e
$ iptables -t nat -L quantum-l3-agent-snat -vChain 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
veth
で直結
*1) dnsmasqを使用する場合は、実際には、dnsmasq用のポートns-XXXXがゲートウェイになります。
Open Cloud Campus19
OpenStack Quantum LinuxBridge Plugin
インスタンスの起動
インスタンスを起動してプライベートネットワークに接続すると、該当インスタンスが起動するCompute Node上で次の構成がおこなわれます。
– プライベートネットワーク用ブリッジ brxxxxを作成– プラベートネットワーク用の物理NIC上のVLANデバイスethX.XXXを作成して、ブリッジに接続– iptablesのfilterテーブルにdnsmasq接続/同一サブネット接続/Security Group用のエントリを作成– Nova Computeが作成した仮想マシンのtapデバイスをブリッジに接続
# brctl showbridge name bridge id STP enabled interfacesbrq6c6cc680-a8 8000.6aa83b0c369f no eth1.101
tap10007fbc-f2# iptables -nL nova-compute-local -vChain 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 -vChain 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 Campus20
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 -vChain 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 -vChain 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 Campus21
OpenStack Quantum LinuxBridge Plugin
参考資料
Open Cloud Campus22
OpenStack Quantum LinuxBridge Plugin
参考書
KVM全般の勉強に 仮想ネットワークとiptablesの勉強に
Open Cloud Campus23
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
OpenStack Quantum LinuxBridge Plugin
中井悦司Twitter @enakai00
オープンクラウド・キャンパス
Euaclyptusユーザ会もよろしくね!