Apache CloudStack 4.4
New features of VPC
2014/9/12第21回 CloudStackユーザー会 in 東京
Satoru Nakaya(@giraffeforestg)____http://giraffeforestg.blog.fc2.com/
自己紹介× 中谷 悟 / Satoru Nakaya× 岐阜県在住× 大学情報基盤 や オープンソースクラウド を担当× ⾃宅SAN友の会× VMware Certified Advanced Professional× CCA for Citrix XenServer
本日はよろしくお願いします。
2
お約束× 本資料の情報を利⽤することによって⽣じるいかなる損害についても責
任を負うものではありません。× 発⾔は個⼈の⾒解であり所属する組織の公式⾒解ではありません。
3
4
VPCの新機能1) Distributed routing and network ACL with OVS plug-in2) Region wide Guest networks and VPC
5
かなり
6
上級者向きです
7
まずCloudStack のVPC について
User VM Instance
Guest Network
Basic Network
8
Internet
VR
User VM Instance
Guest Network
Public Network
Advanced Network
9
Internet
VR
VPC (Virtual Private Cloud)
10
データセンター内ネットワーク 他データセンター
VPC-VR
オンプレミスサイトInternet
Network1(Web)
Network2(AP)
Network3(DB)
ルーティング IPSEC-VPN
11
Distributed routing andnetwork ACL with
OVS plug-in
12
Distributed routing and network ACL with OVS plug-in・OVS
→ Open vSwitch (仮想スイッチ)
・Distributed routing→ 分散ルーティング
・network ACL→ アクセス制御リスト
13
Network1
VPC-VR
Open vSwitch
Open vSwitch
HOST1
HOST2
普通のルーティングルーティングテーブル
Network2 Network3
Open vSwitch
HOST3
Network4
14
Network1
VPC-VR
Open vSwitch
Open vSwitch
HOST1
HOST2
分散ルーティングルーティングテーブル
Network2 Network3
Open vSwitch
HOST3
Network4
フローテーブル フローテーブル
フローテーブル
15
Distributed routing with OVS plug-in
16
Distributed routing with OVS plug-in
VPC-VR
Open vSwitch Open vSwitch
Open vSwitch
Full mesh of GRE tunnels
17
動かしてみよう
18
システム構成・Apache Cloudstack 4.4・HOST: XenServer 6.2 SP1 x 3
19
設定の流れ1) グローバルコンフィグレーションを設定する2) ゾーンを作成する3) サービス オファリングを作成する
・VPC オファリング・ネットワーク オファリング
4) VPCを作成する・VPC-VR・Tier・ACL (デフォルト使用)
5) VMインスタンスを作成する
20
1) グローバルコンフィグレーションを設定する
・sdn.ovs.controller.default.label
sdn.ovs.controller.default.label にゲストネットワークのネットワークラベルを⼊⼒する。
設定後はcloudstack-management プロセス再起動を忘れずに。
21
2) ゾーンを作成するAdvanced Networkを使⽤する。
ゲストネットワークのPhysical Networkを分ける。ゲストネットワークのIsolation methodにGREを設定する。
22
2) ゾーンを作成する
Isolation methodにGREを設定したゾーンを作成するとネットワークサービス プロバイダーでovsが⾃動で有効化される。
23
3) サービス オファリングを作成する
VPCオファリングを作成する。
24
3) サービス オファリングを作成する
Connectivity ProviderはOvsを選択する。
その他のService ProviderはVpcVirtualRouterを選択する。
分散ルーターを選択する。
25
3) サービス オファリングを作成する
ネットワークオファリングを作成する。
26
3) サービス オファリングを作成する
VPCを選択する。
仮想ネットワーク ProviderはOvsを選択する。
その他のService ProviderはVpcVirtualRouterを選択する。
4) VPCを作成する
27
VPCを作成する。先ほど作成したVPCオファリングを選択する。
4) VPCを作成する
28
4) VPCを作成する
29
階層(Tier)を作成する。先ほど作成したネットワークオファリングを選択する。
4) VPCを作成する
30
5) VMインスタンスを作成する
31
5) VMインスタンスを作成する
32
VPC-VR
VPC-VRとVMの位置
33
WEB SERVER
DB SERVER
VPC-VR
34
VPC GRE tunnels [root@xen01 ~]# ovs-vsctl show
:Bridge "xapi1"
fail_mode: standalonePort "t125-1-5"
Interface "t125-1-5"type: greoptions: {cloudstack-network-id="6150d7b7-24fb-4a64-9cd0-b1e77f69d0c8", key="125", remote_ip="10.0.3.7"}
Port "vif3.2"Interface "vif3.2"
Port "t105-1-5"Interface "t105-1-5"
type: greoptions: {cloudstack-network-id="b5fb008f-ce97-4001-83db-23424547cfdb", key="105", remote_ip="10.0.3.7"}
Port "xapi1"Interface "xapi1"
type: internalPort "vif3.3"
Interface "vif3.3"Port "t105-1-2"
Interface "t105-1-2"type: greoptions: {cloudstack-network-id="b5fb008f-ce97-4001-83db-23424547cfdb", key="105", remote_ip="10.0.3.6"}
Port "t125-1-2"Interface "t125-1-2"
type: greoptions: {cloudstack-network-id="6150d7b7-24fb-4a64-9cd0-b1e77f69d0c8", key="125", remote_ip="10.0.3.6"}
35
通信テスト
10.50.1.53 → 10.50.2.218
36
VPC-VR
10.50.2.218/24
10.50.1.53/24
10.50.2.1/24
10.50.1.1/24
Ping 10.50.1.53 → 10.50.2.218
Tracert 10.50.1.53 → 10.50.2.218
パケットキャプチャ
39
VPC-VR
10.50.2.218/24
10.50.1.53/24
10.50.2.1/24
10.50.1.1/24
ここでパケットをキャプチャしてみる
VPC-VRではパケットを処理していない[root@xen01 ~]# tcpdump -n -i vif3.2tcpdump: WARNING: vif3.2: no IPv4 address assigned tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on vif6.2, link-type EN10MB (Ethernet), capture size 65535 bytes^C0 packets captured0 packets received by filter0 packets dropped by kernel
40
[root@xen01 ~]# tcpdump -n -i vif3.3tcpdump: WARNING: vif3.3: no IPv4 address assignedtcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on vif6.3, link-type EN10MB (Ethernet), capture size 65535 bytes^C0 packets captured0 packets received by filter0 packets dropped by kernel
Open vSwitchのフローテーブル(1)[root@xen02 ~]# ovs-ofctl dump-flows xapi1NXST_FLOW reply (xid=0x4):cookie=0x0, duration=601.33s, table=0, n_packets=0, n_bytes=0, priority=1100,in_port=5 actions=resubmit(,1)cookie=0x0, duration=1244.934s, table=0, n_packets=19, n_bytes=2206, priority=1100,in_port=1 actions=resubmit(,1)cookie=0x0, duration=664.007s, table=0, n_packets=0, n_bytes=0, priority=1100,in_port=3 actions=resubmit(,1)cookie=0x0, duration=602.592s, table=0, n_packets=0, n_bytes=0, priority=1100,in_port=4 actions=resubmit(,1)cookie=0x0, duration=1245.463s, table=0, n_packets=23, n_bytes=2466, priority=1200,dl_dst=ff:ff:ff:ff:ff:ff actions=resubmit(,2)cookie=0x0, duration=601.34s, table=0, n_packets=0, n_bytes=0, priority=1000,ip,in_port=5,nw_dst=224.0.0.0/24 actions=dropcookie=0x0, duration=602.602s, table=0, n_packets=0, n_bytes=0, priority=1000,ip,in_port=4,nw_dst=224.0.0.0/24 actions=dropcookie=0x0, duration=664.017s, table=0, n_packets=0, n_bytes=0, priority=1000,ip,in_port=3,nw_dst=224.0.0.0/24 actions=dropcookie=0x0, duration=592.617s, table=0, n_packets=0, n_bytes=0, priority=1200,ip,in_port=2,nw_dst=10.50.1.0/24 actions=resubmit(,1)cookie=0x0, duration=1244.945s, table=0, n_packets=0, n_bytes=0, priority=1000,ip,in_port=1,nw_dst=224.0.0.0/24 actions=dropcookie=0x0, duration=1245.442s, table=0, n_packets=2, n_bytes=84, priority=0 actions=resubmit(,1)cookie=0x0, duration=592.617s, table=0, n_packets=0, n_bytes=0, priority=1100,ip,in_port=2,dl_dst=02:00:45:d3:00:02,nw_dst=10.50.0.0/16 actions=resubmit(,3)cookie=0x0, duration=601.35s, table=0, n_packets=0, n_bytes=0, priority=1000,in_port=5,dl_dst=ff:ff:ff:ff:ff:ff actions=dropcookie=0x0, duration=602.612s, table=0, n_packets=0, n_bytes=0, priority=1000,in_port=4,dl_dst=ff:ff:ff:ff:ff:ff actions=dropcookie=0x0, duration=664.028s, table=0, n_packets=0, n_bytes=0, priority=1000,in_port=3,dl_dst=ff:ff:ff:ff:ff:ff actions=dropcookie=0x0, duration=1244.961s, table=0, n_packets=0, n_bytes=0, priority=1000,in_port=1,dl_dst=ff:ff:ff:ff:ff:ff actions=dropcookie=0x0, duration=1245.452s, table=0, n_packets=0, n_bytes=0, priority=1200,ip,nw_dst=224.0.0.0/24 actions=resubmit(,2)cookie=0x0, duration=592.618s, table=1, n_packets=0, n_bytes=0, priority=1100,dl_dst=02:00:71:b4:00:01 actions=output:2cookie=0x0, duration=592.616s, table=1, n_packets=0, n_bytes=0, priority=1100,dl_dst=02:00:14:01:00:02 actions=output:3cookie=0x0, duration=592.617s, table=1, n_packets=0, n_bytes=0, priority=1100,dl_dst=02:00:45:d3:00:02 actions=output:1cookie=0x0, duration=592.615s, table=1, n_packets=0, n_bytes=0, priority=1100,dl_dst=02:00:39:8e:00:01 actions=output:5cookie=0x0, duration=592.614s, table=1, n_packets=0, n_bytes=0, priority=0 actions=resubmit(,2)
41
Open vSwitchのフローテーブル(2)cookie=0x0, duration=600.994s, table=2, n_packets=4, n_bytes=468, priority=1100,in_port=5 actions=output:2cookie=0x0, duration=600.994s, table=2, n_packets=0, n_bytes=0, priority=1100,in_port=1 actions=output:2cookie=0x0, duration=600.995s, table=2, n_packets=0, n_bytes=0, priority=1100,in_port=3 actions=output:2cookie=0x0, duration=600.994s, table=2, n_packets=5, n_bytes=810, priority=1100,in_port=4 actions=output:2cookie=0x0, duration=600.993s, table=2, n_packets=0, n_bytes=0, priority=1100,in_port=2 actions=output:3,output:5,output:1,output:4cookie=0x0, duration=600.993s, table=2, n_packets=0, n_bytes=0, priority=0 actions=dropcookie=0x0, duration=606.83s, table=3, n_packets=0, n_bytes=0, priority=0 actions=resubmit(,4)cookie=0x0, duration=606.831s, table=3, n_packets=0, n_bytes=0, priority=1002,ip,nw_src=10.50.1.0/24 actions=resubmit(,4)cookie=0x0, duration=606.83s, table=3, n_packets=0, n_bytes=0, priority=1002,ip,nw_src=10.50.2.0/24 actions=resubmit(,4)cookie=0x0, duration=592.618s, table=4, n_packets=0, n_bytes=0, ip,nw_dst=10.50.1.53 actions=mod_dl_src:02:00:45:d3:00:02,mod_dl_dst:02:00:71:b4:00:01,resubmit(,5)cookie=0x0, duration=592.614s, table=4, n_packets=0, n_bytes=0, ip,nw_dst=10.50.2.218 actions=mod_dl_src:02:00:14:01:00:02,mod_dl_dst:02:00:39:8e:00:01,resubmit(,5)cookie=0x0, duration=592.616s, table=4, n_packets=0, n_bytes=0, ip,nw_dst=10.50.1.1 actions=mod_dl_src:02:00:45:d3:00:02,mod_dl_dst:02:00:45:d3:00:02,resubmit(,5)cookie=0x0, duration=592.615s, table=4, n_packets=0, n_bytes=0, ip,nw_dst=10.50.2.1 actions=mod_dl_src:02:00:14:01:00:02,mod_dl_dst:02:00:14:01:00:02,resubmit(,5)cookie=0x0, duration=592.614s, table=4, n_packets=0, n_bytes=0, priority=0 actions=resubmit(,1)cookie=0x0, duration=606.829s, table=5, n_packets=0, n_bytes=0, priority=0 actions=dropcookie=0x0, duration=606.831s, table=5, n_packets=0, n_bytes=0, priority=1001,ip,nw_dst=10.50.2.0/24 actions=resubmit(,1)cookie=0x0, duration=606.832s, table=5, n_packets=0, n_bytes=0, priority=1001,ip,nw_dst=10.50.1.0/24 actions=resubmit(,1)
42
10.50.1.53 → 10.50.1.1
43
VPC-VR
10.50.2.218/24
10.50.1.53/24
10.50.2.1/24
10.50.1.1/24
Ping 10.50.1.53 → 10.50.1.1
パケットキャプチャ
45
VPC-VR
10.50.2.218/24
10.50.1.53/24
10.50.2.1/24
10.50.1.1/24
ここでパケットをキャプチャしてみる
VPC-VRでパケット到着を確認[root@xen01 ~]# tcpdump -n -i vif3.2tcpdump: WARNING: vif3.2: no IPv4 address assignedtcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on vif3.2, link-type EN10MB (Ethernet), capture size 65535 bytes22:02:10.978747 IP 10.50.1.53 > 10.50.1.1: ICMP echo request, id 33555, seq 7, length 6422:02:10.978990 IP 10.50.1.1 > 10.50.1.53: ICMP echo reply, id 33555, seq 7, length 6422:02:11.978760 IP 10.50.1.53 > 10.50.1.1: ICMP echo request, id 33555, seq 8, length 6422:02:11.979023 IP 10.50.1.1 > 10.50.1.53: ICMP echo reply, id 33555, seq 8, length 6422:02:12.978616 IP 10.50.1.53 > 10.50.1.1: ICMP echo request, id 33555, seq 9, length 6422:02:12.978911 IP 10.50.1.1 > 10.50.1.53: ICMP echo reply, id 33555, seq 9, length 6422:02:13.978617 IP 10.50.1.53 > 10.50.1.1: ICMP echo request, id 33555, seq 10, length 6422:02:13.978863 IP 10.50.1.1 > 10.50.1.53: ICMP echo reply, id 33555, seq 10, length 64^C8 packets captured8 packets received by filter0 packets dropped by kernel
46
VPC-VRでパケット到着を確認[root@xen01 ~]# tcpdump -n -i eth2 ip proto gre
tcpdump: WARNING: eth2: no IPv4 address assignedtcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on eth2, link-type EN10MB (Ethernet), capture size 65535 bytes23:07:39.209985 IP 10.0.3.6 > 10.0.3.5: GREv0, key=0x7d, length 106: IP 10.50.1.53 > 10.50.1.1: ICMP echo request, id 33555, seq 3935, length 6423:07:39.210311 IP 10.0.3.5 > 10.0.3.6: GREv0, key=0x7d, length 106: IP 10.50.1.1 > 10.50.1.53: ICMP echo reply, id 33555, seq 3935, length 6423:07:40.210167 IP 10.0.3.6 > 10.0.3.5: GREv0, key=0x7d, length 106: IP 10.50.1.53 > 10.50.1.1: ICMP echo request, id 33555, seq 3936, length 6423:07:40.210614 IP 10.0.3.5 > 10.0.3.6: GREv0, key=0x7d, length 106: IP 10.50.1.1 > 10.50.1.53: ICMP echo reply, id 33555, seq 3936, length 6423:07:41.209520 IP 10.0.3.6 > 10.0.3.5: GREv0, key=0x7d, length 106: IP 10.50.1.53 > 10.50.1.1: ICMP echo request, id 33555, seq 3937, length 6423:07:41.209769 IP 10.0.3.5 > 10.0.3.6: GREv0, key=0x7d, length 106: IP 10.50.1.1 > 10.50.1.53: ICMP echo reply, id 33555, seq 3937, length 6423:07:42.209465 IP 10.0.3.6 > 10.0.3.5: GREv0, key=0x7d, length 106: IP 10.50.1.53 > 10.50.1.1: ICMP echo request, id 33555, seq 3938, length 6423:07:42.209682 IP 10.0.3.5 > 10.0.3.6: GREv0, key=0x7d, length 106: IP 10.50.1.1 > 10.50.1.53: ICMP echo reply, id 33555, seq 3938, length 64^C8 packets captured44 packets received by filter5 packets dropped by kernel
47
48
Region wideGuest networks and VPC
通常のVPC
49
zone01 zone02
VPC1
tier
tier
VM
VM
VPC-VR
ゾーンが違えばVPCも別管理
VPC2
tier
tier
VM
VM
VPC-VR
Region wide VPC
50
zone01 zone02
Region wide VPC
tier1
tier2
VM1
VM2
VPC-VR
ゾーンをまたがったVPC
51
動かしてみよう
52
システム構成・Apache Cloudstack 4.4・HOST: XenServer 6.2 SP1 x 2
53
設定の流れ1) グローバルコンフィグレーションを設定する2) ゾーンを作成する(2つ)3) サービス オファリングを作成する
・VPC オファリング・ネットワーク オファリング
4) VPCを作成する・VPC-VR・Tier・ACL
5) VMインスタンスを作成する
54
2) ゾーンを作成する(2つ)
zone01
zone02
55
3) サービス オファリングを作成する
VPCオファリングを作成する。
56
3) サービス オファリングを作成する
Connectivity ProviderはOvsを選択する。
その他のService ProviderはVpcVirtualRouterを選択する。
リージョンレベルVPCを選択する。
分散ルーターは選択しない。※同時選択しても正常動作しない。
57
3) サービス オファリングを作成する
ネットワークオファリングを作成する。
58
3) サービス オファリングを作成する
VPCを選択する。
仮想ネットワーク ProviderはOvsを選択する。
その他のService ProviderはVpcVirtualRouterを選択する。
ストレッチドL2サブネットのサポートを選択する。
59
4) VPCを作成するVPCを作成する。
先ほど作成したVPCオファリングを選択する。
60
4) VPCを作成する
注意:VPC作成時にゲストネットワークのDNSドメインを⼊⼒しないとエラーになる。
4) VPCを作成する
61
4) VPCを作成する
62
次に階層(Tier)を作成するが,Region level VPCの場合はVPCビューでは作成せず
ゲストネットワークビューで作成する。
4) VPCを作成する
63
理由: Region wide VPCはゾーン指定してTierを作成する必要があるが,いまのところVPCビューではゾーン選択ができない。
64
4) VPCを作成する
65
4) VPCを作成する
66
4) VPCを作成する階層(Tier)を作成する。
ゾーンおよび,先ほど作成したネットワークオファリング,VPNオファリングを選択する。
67
4) VPCを作成する
68
4) VPCを作成する
69
4) VPCを作成するACLを設定する。
(ゲストネットワークビューでTierを作成すると設定されない為,VPCビューで設定する)
70
4) VPCを作成する
71
5) VMインスタンスを作成する
72
5) VMインスタンスを作成する
73
5) VMインスタンスを作成する
74
5) VMインスタンスを作成する
zone01
zone02
VPC-VR
VM1
VM2
75
5) VMインスタンスを作成する
10.50.2.1/24
10.50.1.1/24
10.50.2.30/24
10.50.1.126/24
zone02
zone01
76
通信テスト:VM1→VPC-VR
77
通信テスト:VM2→VPC-VR
78
続いて ストレッチドL2サブネット
ストレッチドL2サブネット
79
zone01 zone02
Region wide VPC
tier2 VM2
VPC-VR
tier1 VM1 VM3
ストレッチドL2サブネット
L2サブネットの拡張
80
ストレッチドL2サブネット
ゾーン2 かつ Tier1 指定でVMインスタンス(VM3)を作成したい。
81
ストレッチドL2サブネットTier1が選択できない...
あきらめずにAPIを使う![root@acs ~]# curl -s 'http://localhost:8096/client/api?command=deployVirtualMachine&serviceofferingid=fb90e214-2210-438f-911d-108a234cd90c&hypervisor=XenServer&templateid=77591822-1554-11e4-ba4e-000c2982380a
※zone02のテンプレートID&zoneid=8ffe7c17-deb7-4718-89e9-cd3b7ea87bba
※zone02のID&iptonetworklist%5B0%5D.networkid=f9665bd6-1a14-4b8b-9dcf-7d58ec62c40d
※VPC TierのネットワークID&name=VM3&displayname=VM3&account=admin&domainid=775151aa-1554-11e4-ba4e-000c2982380a&response=json' | python -mjson.tool
82
83
ストレッチドL2サブネット
84
ストレッチドL2サブネット
zone01
zone02
VPC-VR
VM1
VM2
VM3
85
通信テスト:VM3→VPC-VR
まとめDistributed routing and network ACL with OVS plug-in・分散ルーテイング・Open vSwitch・GRE Tunnels
Region wide Guest networks and VPC・ゾーンをまたがったVPC・L2サブネットの拡張・Open vSwitch・GRE Tunnels
86
87
ありがとうございましたThank you so much.