24
OpenStack Quantum LinuxBridge Plugin ver1.1 中井悦司 Twitter @enakai00 オープンクラウド・キャンパス OpenStackのQuantum(LinuxBridge Plugin)が 実際どうやって仮想ネットワークを 構成するのか説明する資料

OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

OpenStack Quantum LinuxBridge Plugin

ver1.1 中井悦司Twitter @enakai00

オープンクラウド・キャンパス

OpenStackのQuantum(LinuxBridge Plugin)が

実際どうやって仮想ネットワークを

構成するのか説明する資料

Page 2: 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専門)

好評発売中

Page 3: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

Open Cloud Campus3

OpenStack Quantum LinuxBridge Plugin

前提環境

Page 4: 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を使用

仮想ルータが構成されるノード

Page 5: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

Open Cloud Campus5

OpenStack Quantum LinuxBridge Plugin

この資料で説明する仮想ネットワークの論理構成

インスタンスごとに接続するプライベートネットワークを選択

(複数選択可能)

パブリックネットワーク

net01 net02

ファイアウォール機能付きNATルータ

プライベートネットワーク(サブネット01)

プライベートネットワーク(サブネット02)

同一サブネット内の通信はフィルタリングされない

異なるサブネットからの通信はセキュリティグループでフィルタリング

パブリックネットワークとの通信はNATを使用

特定テナント専用のネットワークも用意可能

Page 6: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

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で行う

Page 7: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

Open Cloud Campus7

OpenStack Quantum LinuxBridge Plugin

まずは完成形を見てみましょう

Page 8: 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

Page 9: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

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が構成

Page 10: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

Open Cloud Campus10

OpenStack Quantum LinuxBridge Plugin

iptablesによるフィルタリングとNATの設定内容

Page 11: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

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の機能)

Page 12: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

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が設定します。

Page 13: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

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が設定します。

Page 14: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

Open Cloud Campus14

OpenStack Quantum LinuxBridge Plugin

仮想ネットワークの構成手順にしたがって実際の構成の様子を追ってみましょう

Page 15: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

Open Cloud Campus15

OpenStack Quantum LinuxBridge Plugin

仮想ルータの定義

仮想ルータは定義しただけでは、実際の構成は何も行われません。

# quantum router-create router01

Page 16: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

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

で直結

Page 17: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

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

で直結

Page 18: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

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がゲートウェイになります。

Page 19: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

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

Page 20: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

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

Page 21: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

Open Cloud Campus21

OpenStack Quantum LinuxBridge Plugin

参考資料

Page 22: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

Open Cloud Campus22

OpenStack Quantum LinuxBridge Plugin

参考書

KVM全般の勉強に 仮想ネットワークとiptablesの勉強に

Page 23: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

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

Page 24: OpenStackのQuantum(LinuxBridge Plugin)が実際どうやって仮想ネットワークを構成するのか説明する資料

OpenStack Quantum LinuxBridge Plugin

中井悦司Twitter @enakai00

オープンクラウド・キャンパス

Euaclyptusユーザ会もよろしくね!