7. Neutron の基本構造
•
API に対応して、物理操作を行う Plugin が存在
– Plugin を切り替えることで、様々なネットワーク技術を利用可能
– 複数のPlugin (Core + Service *N) が併存。一つのPluginで複数のAPIも対応可
•
OpenStack の一部だが、Neutron 単体でも利用可能
– Neutron API を使うことで、特定のベンダーAPI に Lock-In されにくくなるかも
Neutron API
LBaaS
API
FWaaS
API
L3 API
Compute API
Neutron
LBaaS
Plugin
FWaaS
Plugin
Nova
L2 API
Compute Node
L2/L3 Plugin
VM
Agent
XXX
HAProxy
Driver
Agent
L3
Agent
Network
Controller
OpenFlow Controller など
VM
vSwitch
HW Switch
8. 仮想ルータの実現方法
•
現状の Neutron では
下線付きのものが存在
Network Namespace (l3-agent)
– Linux Kernel の名前空間機能を利用
•
Distributed Router
– 仮想スイッチ、OpenFlow スイッチをコントローラで制御して実現
•
Router as Service VM
– 仮想ルータ単位に VM を用意する。通常の VM と同じ。
•
VRF on normal router
– いわゆるハードウェアルータで、複数の論理ルーティングテーブルがあるものを利用
VM
net1
VM
R
net2
VM
分散ルータの例
ルータの振りをして
nexthopのARPに応答
VM
VM vSW
同じサブネットなら
そのまま転送
Controller
vSW
VM
VM
12. l3-agent netns example (2/3)
(router1)
ubuntu@ostack02:~$ sudo ip netns exec qrouter-b920913b-22ca-48ad-843b-e8ab78ae22a7 ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: qr-656aebdc-61: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode
DEFAULT qlen 1000
link/ether fa:16:3e:a2:1b:62 brd ff:ff:ff:ff:ff:ff
3: qg-215b9b04-9e: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode
DEFAULT qlen 1000
link/ether fa:16:3e:f3:c9:4c brd ff:ff:ff:ff:ff:ff
4: qr-8357d717-fa: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode
DEFAULT qlen 1000
link/ether fa:16:3e:c9:c9:41 brd ff:ff:ff:ff:ff:ff
ubuntu@ostack02:~$ sudo ip netns exec qrouter-b920913b-22ca-48ad-843b-e8ab78ae22a7 netstat -nr
Kernel IP routing table
Destination
Gateway
Genmask
Flags MSS Window irtt Iface
0.0.0.0
172.24.4.225
0.0.0.0
UG
0 0
0 qg-215b9b04-9e
10.0.0.0
0.0.0.0
255.255.255.0 U
0 0
0 qr-656aebdc-61
10.2.2.0
0.0.0.0
255.255.255.0 U
0 0
0 qr-8357d717-fa
172.24.4.224
0.0.0.0
255.255.255.240 U
0 0
0 qg-215b9b04-9e
13. l3-agent netns example (3/3)
(router2)
ubuntu@ostack02:~$ sudo ip netns exec qrouter-6ce6df1a-0eb8-4bf8-8ad6-fe6855d5e648 ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: qr-04c3c871-55: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode
DEFAULT qlen 1000
link/ether fa:16:3e:ef:af:b6 brd ff:ff:ff:ff:ff:ff
4: qr-1b1091ed-41: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode
DEFAULT qlen 1000
link/ether fa:16:3e:da:9e:50 brd ff:ff:ff:ff:ff:ff
ubuntu@ostack02:~$ sudo ip netns exec qrouter-6ce6df1a-0eb8-4bf8-8ad6-fe6855d5e648 ip route
10.2.2.0/24 dev qr-1b1091ed-41 proto kernel scope link src 10.2.2.2
10.3.3.0/24 dev qr-04c3c871-55 proto kernel scope link src 10.3.3.1