Top Banner
OpenStack の仮想ネットワーク Neutron の今~ Akihiro Motoki (@ritchey98) NEC / 日本 OpenStack ユーザー会 Oct 11 st , 2013
14

20131011_openstack-neutron-vyattameeting

May 06, 2015

Download

Technology

Akihiro Motoki
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 20131011_openstack-neutron-vyattameeting

OpenStack の仮想ネットワーク~Neutron の今~

Akihiro Motoki (@ritchey98)NEC / 日本 OpenStack ユーザー会

Oct 11st , 2013

Page 2: 20131011_openstack-neutron-vyattameeting

自己紹介

• 元木顕弘 (@ritchey98)– NEC 情報・ナレッジ研究所– IPルータ、広域Ethernet装置、迷惑メールフィルタなどの開発をやっていました。

– ここ数年は、ネットワーク仮想化、OpenStack, OpenFlow 周りで活動しています。

• OpenStack Developer– Neutron and Horizon Core Developer– I18N team

• Linux JM (日本語マニュアル) Project Maintainer

Page 3: 20131011_openstack-neutron-vyattameeting

OpenStack Networking (Neutron)

• Network-as-a-Service (NaaS) を提供する

–テナントが自由なネットワーク操作を提供

• 複数のプライベートなネットワークの作成

• IPアドレスの制御

– L2/L3 に限らず、さまざまなネットワークサービスの提供

• Neutron API– API は論理操作のみを定義。物理操作を分離。

–物理操作は Neutron Plugin が行う

Page 4: 20131011_openstack-neutron-vyattameeting

OpenStack の仮想ネットワークモデル

• ネットワークの自由な作成• IP overlapping Tenant Networks

TenantA-VM110.0.0.2

TenantA-VM110.0.0.2

TenantA-VM3TenantA-VM39.0.0.2

TenantA-VM210.0.0.3

TenantA-VM210.0.0.3

External

88.0.0.0/18

External Net

88.0.0.0/18

Tenant-A Net110.0.0.0/24

Tenant-A Net29.0.0.0/24

L2 virtual networkvirtual port

virtual servervirtual interface (VIF)

virtual subnet

SNAT for external trafficFloating IP

• 複数 NIC を持った VM の)作成

• ルータ経由で Subnet 間通信• Floating IP での外部からの接続 (Elastic IP@AWS)

Page 5: 20131011_openstack-neutron-vyattameeting

Network API の例• API モデルは基本的に REST • 一般ユーザー向けの API では、論理情報のみが見える• 管理者権限であれば、物理情報を指定した操作も一部では定義。

GET http://localhost:9696/v2.0/networks/20b49737-c718-4f10-8edc-7fe9f8ee7cfd

{"network": {

"admin_state_up": true,"id": "20b49737-c718-4f10-8edc-7fe9f8ee7cfd","name": "net1","router:external": false,"shared": false,"status": "ACTIVE","subnets": [

"644f729f-1c86-48b3-91a2-761e29398e81"],"tenant_id": "be11ce3cabc74ee68d4f22253ffbb5e8"

}}

GET http://localhost:9696/v2.0/networks/20b49737-c718-4f10-8edc-7fe9f8ee7cfd

{"network": {

"admin_state_up": true,"id": "20b49737-c718-4f10-8edc-7fe9f8ee7cfd","name": "net1","router:external": false,"shared": false,"status": "ACTIVE","subnets": [

"644f729f-1c86-48b3-91a2-761e29398e81"],"tenant_id": "be11ce3cabc74ee68d4f22253ffbb5e8","provider:network_type": "vlan","provider:physical_network": "physnet_1","provider:segmentation_id": 201

}}一般ユーザー 管理者ユーザー

Page 6: 20131011_openstack-neutron-vyattameeting

Network Service Insertion

Network 1 Network 2

External Network

VPN Connection

Service Insertion

Page 7: 20131011_openstack-neutron-vyattameeting

Nova

Neutron の基本構造• API に対応して、物理操作を行う Plugin が存在

– Plugin を切り替えることで、様々なネットワーク技術を利用可能– 複数のPlugin (Core + Service *N) が併存。一つのPluginで複数のAPIも対応可

• OpenStack の一部だが、Neutron 単体でも利用可能– Neutron API を使うことで、特定のベンダーAPI に Lock-In されにくくなるかも

Neutron Compute Node

VM VM

vSwitch

HW Switch

L2/L3 PluginFWaaSPlugin

LBaaSPlugin

Agent

L2 APIL3 APIFWaaSAPI

LBaaSAPI

NetworkController

OpenFlow Controller など

Neutron API

L3Agent

HAProxyAgent

Compute API

XXXDriver

Page 8: 20131011_openstack-neutron-vyattameeting

VM

VMvSW

ルータの振りをしてnexthopのARPに応答

仮想ルータの実現方法• Network Namespace (l3-agent)

– Linux Kernel の名前空間機能を利用

• Distributed Router– 仮想スイッチ、OpenFlow スイッチをコントローラで制御して実現

• Router as Service VM– 仮想ルータ単位に VM を用意する。通常の VM と同じ。

• VRF on normal router– いわゆるハードウェアルータで、複数の論理ルーティングテーブルがあるものを利用

VM

VM vSW

net1 net2R VMVMVM

現状の Neutron では下線付きのものが存在

分散ルータの例

Controller

ルータの振りをしてnexthopのARPに応答

同じサブネットならそのまま転送

Page 9: 20131011_openstack-neutron-vyattameeting

L3-agent での仮想ルータ• Linux Kernel の機能を組み合わせて実現

– Network Namespace + iptables• Network Namespace (netns)

– ネットワークのプロトコル・スタックを一つの OS 上に複数持つ仕組み。IPアドレスや NW インタフェース等が分離した空間を複数構成可能。

– LXC などのコンテナ技術で発展

netns for router1 netns for router2

qg-xxx qr-yz1 qr-yz2 qr-zz1 qr-zz2

qg-xxx qr-yz1 qr-yz2 qr-zz1 qr-zz2

veth pair

Routing + iptables Routing + iptables

eth1 eth2

Open vSwitch

Page 10: 20131011_openstack-neutron-vyattameeting

おまけ

Page 11: 20131011_openstack-neutron-vyattameeting

l3-agent netns example (1/3)ubuntu@ostack02:~$ ip netnsqdhcp-07b6df1f-bb88-4cc5-8903-45c543143f9fqdhcp-373ed983-b2e9-4c6b-90f2-92c347302675qrouter-6ce6df1a-0eb8-4bf8-8ad6-fe6855d5e648qrouter-b920913b-22ca-48ad-843b-e8ab78ae22a7qdhcp-20b49737-c718-4f10-8edc-7fe9f8ee7cfd

ubuntu@ostack02:~$ neutron router-list+--------------------------------------+---------+--------------------------------------------------------+| id | name | external_gateway_info |+--------------------------------------+---------+--------------------------------------------------------+| 6ce6df1a-0eb8-4bf8-8ad6-fe6855d5e648 | router2 | null || b920913b-22ca-48ad-843b-e8ab78ae22a7 | router1 | {"network_id": "e4ad0d48-d0ee-42f8-889b-72283fdd607f", || | | "enable_snat": true} |+--------------------------------------+---------+--------------------------------------------------------+

Page 12: 20131011_openstack-neutron-vyattameeting

l3-agent netns example (2/3)(router1)ubuntu@ostack02:~$ sudo ip netns exec qrouter-b920913b-22ca-48ad-843b-e8ab78ae22a7 ip link1: 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:002: 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:ff3: 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:ff4: 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:ffubuntu@ostack02:~$ sudo ip netns exec qrouter-b920913b-22ca-48ad-843b-e8ab78ae22a7 netstat -nrKernel IP routing tableDestination Gateway Genmask Flags MSS Window irtt Iface0.0.0.0 172.24.4.225 0.0.0.0 UG 0 0 0 qg-215b9b04-9e10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 qr-656aebdc-6110.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 qr-8357d717-fa172.24.4.224 0.0.0.0 255.255.255.240 U 0 0 0 qg-215b9b04-9e

Page 13: 20131011_openstack-neutron-vyattameeting

l3-agent netns example (3/3)(router2)ubuntu@ostack02:~$ sudo ip netns exec qrouter-6ce6df1a-0eb8-4bf8-8ad6-fe6855d5e648 ip link1: 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:002: 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:ff4: 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:ffubuntu@ostack02:~$ sudo ip netns exec qrouter-6ce6df1a-0eb8-4bf8-8ad6-fe6855d5e648 ip route10.2.2.0/24 dev qr-1b1091ed-41 proto kernel scope link src 10.2.2.210.3.3.0/24 dev qr-04c3c871-55 proto kernel scope link src 10.3.3.1

Page 14: 20131011_openstack-neutron-vyattameeting