36
OpenStack が実現する仮想ネットワーク OpenStack Neutron[Havana Update] Akihiro Motoki (@ritchey98) OpenStack Neutron Core Developer Japan OpenStack Users Group Dec 11 th , 2013

20131211 Neutron Havana

Embed Size (px)

Citation preview

Page 1: 20131211 Neutron Havana

OpenStack が実現する仮想ネットワーク ~OpenStack Neutron~ [Havana Update]

Akihiro Motoki (@ritchey98) OpenStack Neutron Core Developer

Japan OpenStack Users Group Dec 11th, 2013

Page 2: 20131211 Neutron Havana

はじめに

• 本資料は 2012年12月の OSC Cloud での資料を 2013年12月時点での情報に更新したものです。

• LBaaS などの Network Advanced Service の情報を追加しています。

Page 3: 20131211 Neutron Havana

自己紹介

• 元木 顕弘 (@ritchey98)

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

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

• OpenStack Developer

– Neutron and Horizon Core Developer – I18N (国際化) team

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

2013/12/12 Okinawa OpenDays 2013 3

Page 4: 20131211 Neutron Havana

??? Neutron

OpenStack Project と Neutron

Compute

Storage

Network

Nova

Swift (Objects)

Glance (Images)

Cinder (Block)

identity Keystone

*-as-a-Service Capability OpenStack Service

Page 5: 20131211 Neutron Havana

Neutron の目的 #1

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

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

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

• IPアドレスの制御

–論理ネットワーク操作API

• 論理操作と物理操作を分離

• 物理レイヤーは Neutron (Plugin) が設定する

Page 6: 20131211 Neutron Havana

Neutron の目的 #2

• 複数のネットワーク技術に対応

– データセンタでは新たな要件が発生 • multi tenancy, remote data center, VM mobility, advanced

network services, …

– Nova は VLAN + Linux iptables のみが利用可能

– 新しいネットワーク技術に対応できるアーキテクチャ • SDN/OpenFlow-based network

• Overlay tunneling (VXLAN, NVGRE, STT, …)

• L2 Fabric (Fabric Path, QFabric, …)

Page 7: 20131211 Neutron Havana

Neutron 仮想NWモデル • テナントは複数の Network を作成できる • Network には Subnet (CIDR, GW等) を関連付ける。

– 1つのNWに複数のSubnetを関連付けできる。IPv4+IPv6, IPv4 Address pool 等 – IPアドレスの払い出し (IPAM) – テナント間での IP アドレス重複にも対応

• Networkに複数のPort を作成できる。(L2SWのポートのイメージ) – VM の仮想NICはやルータのINF は Port と関連付けられる。

Net1

VM1 10.0.0.2 Nova

Neutron L2 virtual network

VM2 10.0.0.3

virtual port

virtual server

virtual interface (VIF)

virtual subnet 10.0.0.0/24 IPv6

Page 8: 20131211 Neutron Havana

Neutron でできること

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

TenantA-VM1 10.0.0.2

TenantA-VM3 9.0.0.2

TenantA-VM2 10.0.0.3

External Net

88.0.0.0/18

Tenant-A Net1 10.0.0.0/24

Tenant-A Net2 9.0.0.0/24

L2 virtual network

virtual port

virtual server

virtual interface (VIF)

virtual subnet

SNAT for external traffic Floating IP

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

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

Page 9: 20131211 Neutron Havana

Tenant View vs Infra View

Infra (Provider) View

Tenant-A

VM

VMnet2

VM

VMnet1 R

Tenant-A

VM

VMnet1 R

Internet

Tenatn View

Data Center Network

Internet

GW

vSwitch

VM VM

vSwitch

VM VM

vSwitch

VM VM

SW SW

Page 10: 20131211 Neutron Havana

Tenant View vs Infra View

Infra (Provider) View

Tenant-A

VM

VMnet2

VM

VMnet1 R

Tenant-A

VM

VMnet1 R

Internet

Tenatn View

Data Center Network

Internet

GW

vSwitch

VM VM

vSwitch

VM VM

vSwitch

VM VM

User

Neutron

NW Controller

SW SW

Nova

• Neutron は論理操作をユーザに提供 • 物理操作はプラグイン or NW Controller が行う

Plugin

REST API

Page 11: 20131211 Neutron Havana

Neutron API

• Neutron で「正式に」規定されているリソースは Network, Subnet, Port の 3種類 (Core Resoruces) – それ以外は Extension として実装。Extension だが

Experimental 扱い以外はリソースモデルが変更されることは基本的にない。

• Network, Subnet, Port のそれぞれに対して List, Create, Read, Update, Delete 操作を REST API で行う。 – net-create, net-update, net-delete,

net-list, net-show – subnet-create, subnet-update, subnet-delete,

subnet-list, subnet-show – port-create, port-update, port-delete,

port-list, port-show

Page 12: 20131211 Neutron Havana

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 13: 20131211 Neutron Havana

Neutron API (network)

$ neutron net-create net1 Created a new network: +-----------------+--------------------------------------+ | Field | Value | +-----------------+--------------------------------------+ | admin_state_up | True | | id | a5d04085-3a15-470f-adca-b67c0958a829 | | name | net1 | | router:external | False | | shared | False | | status | ACTIVE | | subnets | | | tenant_id | c3ed8c16308642de9b15647759d9e5e9 | +-----------------+--------------------------------------+

Page 14: 20131211 Neutron Havana

Neutron API (subnet)

$ neutron subnet-create –name subnet1 net1 172.16.1.0/24 Created a new subnet: +------------------+------------------------------------------------+ | Field | Value | +------------------+------------------------------------------------+ | allocation_pools | {"start": "172.16.1.2", "end": "172.16.1.254"} | | cidr | 172.16.1.0/24 | | dns_nameservers | | | enable_dhcp | True | | gateway_ip | 172.16.1.1 | | host_routes | | | id | 736b30c1-5b83-4b52-b5ac-a397273cb240 | | ip_version | 4 | | name | subnet1 | | network_id | a5d04085-3a15-470f-adca-b67c0958a829 | | tenant_id | c3ed8c16308642de9b15647759d9e5e9 | +------------------+------------------------------------------------+

Page 15: 20131211 Neutron Havana

Neutron API (port)

$ neutron port-show 332d3288-5d7a-4ea9-8af6-9b5c82615bb2 +----------------+--------------------------------------------------------+ | Field | Value | +----------------+--------------------------------------------------------+ | admin_state_up | True | | device_id | d8b5dc3c-f73c-44bf-9c04-13f986cf5e6b | | device_owner | compute:nova | | fixed_ips | {"subnet_id": "d9054ffb-1a0d-41d1-835b-8758d11f0060", | | | "ip_address": "10.0.0.3"} | | id | 332d3288-5d7a-4ea9-8af6-9b5c82615bb2 | | mac_address | fa:16:3e:20:b9:f6 | | name | port1 | | network_id | 6d013e3f-7ea9-402c-9725-9cb693809988 | | status | ACTIVE | | tenant_id | 34657b6768184444af7b5081213e6e73 | +----------------+--------------------------------------------------------+

Page 16: 20131211 Neutron Havana

Neutron Architecture • 物理ネットワークの制御は Neutron Plugin が行う。 • Plugin を切り替えることで、様々なネットワーク技術を利用できる。現在は同時には一種類のみ利用可。

Neutron

Nova

Neutron Plugin

Nova Compute

Virtual Switch

VM VM

Nova Compute

Virtual Switch

VM VM

HW Switch

CLI / Dashboard (Horizon) / Orchestration Tool

Physical Network

Neutron APINova API

agent agent

Page 17: 20131211 Neutron Havana

Neutron

Nova

Neutron Plugin

Nova Compute

Virtual Switch

VM VM

Nova Compute

Virtual Switch

VM VM

HW Switch

CLI / Dashboard (Horizon) / Orchestration Tool

Physical Network

Neutron API Nova API

agent agent

Page 18: 20131211 Neutron Havana

Neutron

OpenStack と OpenFlow の連携

Nova

NEC OpenFlow Plugin Nova Compute

Virtual Switch

VM VM

Nova Compute

Virtual Switch

VM VM

HW Switch

CLI / Dashboard (Horizon) / Orchestration Tool

OpenFlow Controller

Network

OFC API

Neutron API

OpenFlow Protocol

Nova API

agent agent

Page 19: 20131211 Neutron Havana

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 Plugin FWaaS Plugin

LBaaS Plugin

Agent

L2 API L3 API FWaaS

API LBaaS

API

Network Controller

OpenFlow Controller など

Neutron API

L3 Agent

HAProxy Agent

Compute API

XXX Driver

最近の構造

Page 20: 20131211 Neutron Havana

Neutron Plugin (Core) • ML2 (Modular Layer 2) plugin

• Open vSwitch plugin (VLAN, GRE, VXLAN) • Linux Bridge plugin (VLAN, VXLAN) • Hyper-V plugin • Brocade plugin • Mellanox plugin

• Nicira NVP Plugin

– Will be renamed to Vmware NSX plugin

• Ryu Plugin • NEC OpenFlow Plugin

– Trema SliceableSwitch (OSS), ProgrammableFlow

• Big Switch plugin • Midonet plugin • PLUGGrid plugin • Cisco Plugin

– Cisco UCS, Nexus 1000V . Open vSwitch もあわせて制御

Page 21: 20131211 Neutron Havana

Neutron ML2 Plugin • ML2 = Modular Layer 2

– 複数のプラグインを統合する目的で開発 – デフォルトの Reference Implementation となり、OVS / Linux Bridge plugin は今後削除される。

– 複数のネットワーク技術を同時に使えるようになる予定 – Type Driver と Mechanism Driver の2種類のドライバー

• Type Driver – ネットワーク種別に応じたリソースの管理を行う。VLAN の ID 払い出しなど。 – ネットワーク種別は、ネットワーク作成時に provider_network extension の

network_type で指定する – VLAN, VXLAN, GRE, Local, Flat

• Mechanism Driver – 実際のデバイスの操作を行う。複数の mechanism driver を同時に有効にできる (ordered list)。各 mechanism driver は自分が対応しているネットワーク種別であれば処理を行う。

– Open vSwitch agent driver, Linux Bridge agent driver, Hyper-V agent driver – Cisco Nexus 1000V driver, Arista driver, Tail-f driver – L2 population driver

• MAC アドレス情報を OVS に展開し、ブロードキャストを削減する

Page 22: 20131211 Neutron Havana

Neutron の機能ブロック • Neutron Server

– 論理ネットワークの管理を行う – Plugin は Neutron Server の一部

• Agent – Neutron Server 以外のサービスプロセス。Neutron Server 以外のサーバでも動作可能。

– Plugin の実現方式に応じて、必要に応じて使用する。 実現方式によっては Agent は不要。

• Agent

– Plugin Agent • 仮想スイッチの情報取得、設定を行う

– DHCP Agent • 仮想ネットワーク単位のDHCPサーバの管理を行う

– L3 Agent • 論理ルータの操作を行う。論理ルータは、iptables を利用して実現

– Metadata Agent • Neutron 環境において Metadata サーバへのアクセスを Nova metadata server にプロキシーする。

Page 23: 20131211 Neutron Havana

Nova(CC)

Neutron Server

Compute Node

Compute Node

Data Network

eth1 eth1

eth0 eth0 eth0

OVS (br-int)

OVS (br-int)

Nova Compute

Nova Compute

Plugin Agent Plugin Agent

Management Network

機能ブロックと配置

Controller Node

eth0

eth1

OVS (br-int)

DHCP agent

L3 agent

Plugin Agent

OVS (br-ex)

Network Node

eth2

External network

metadata agt

Page 24: 20131211 Neutron Havana

機能ブロックと配置

• Plugin Agent

– データトラフィックを扱うノードで動作させる必要あり

• Nova-compute ノード

• DHCP-agent が動作するノード

• L3-agent が動作するノード

• DHCP-agent, L3-agent

– いずれか一つのノードで動作させる必要あり

– L3-agent は外部ネットワークとの通信を行うため、専用ノードにするのが望ましい。

– 現状、Nova-network の multi_host 構成は未対応

Page 25: 20131211 Neutron Havana

ADVANCED NETWORK SERVICE

Page 26: 20131211 Neutron Havana

Advanced Network Services

• LBaaS – Grizzly で追加

– 複数の Load Balancer 実装への対応

– 現状は 1-arm Load Balancer のみの対応

Havana で追加

• FWaaS – Iptables table OSS implementation (+ vendor plugin)

• VPNaaS – IPSec VPN (L3-VPN) support (Openswan based)

Page 27: 20131211 Neutron Havana

サービス配置パターン

Network 1

External Network

Network 2

Network 1

FW on network

FW on Port (security group?)

FW on Router

Firewall

Page 28: 20131211 Neutron Havana

サービス配置パターン

Load Balancer

Network 1

Network 1

Network 1

Network 2

Direct Return

2-arm LB

1-arm LB

- terminated - Router

Page 29: 20131211 Neutron Havana

Network Service Insertion

Network 1 Network 2

External Network

VPN Connection

Service Insertion

Page 30: 20131211 Neutron Havana

LBaaS • Grizzly で追加

– LBaaS API (tenant API) 策定 – HAProxy reference implementation のみ

• Havana – Service Type Framework

• Backend が指定可能に。複数のドライバーを選択して LB pool を作成できる

– Vendor Driver, LB Plugin の追加

• Icehouse – Multiple VIPs per pool, VIP の pool 間での移動 – Layer7 support – SSL termination – Routed Service Insertion (LVS based) ? – https://etherpad.openstack.org/p/icehouse-neutron-lbaas

Page 31: 20131211 Neutron Havana

FWaaS • Havana で追加

– Horizon, Heat support – FWaaS API (rule, policy, firewall resource) – L3-agent based impl, some vendor plugin – 制限事項

• 1 firewall per tenant (with l3-agent) • Firewall applies to all routers

• Icehouse – Service Insertion/Service Type Framework – Zone – Apply Operation – Counters – https://etherpad.openstack.org/p/icehouse-neutron-fwaas

Page 32: 20131211 Neutron Havana

VPNaaS

• Havana で追加 – IPSec VPN (L3 VPN) のみサポート – Horizon, Heat support

• Icehouse – Service Type Framework

• 複数種類のVPNのサポート

– SSL-VPN – IPSec Certification Support – MPLS/BGP – (L2-VPN?) – https://etherpad.openstack.org/p/NeutronVPNaaSIce

House

Page 33: 20131211 Neutron Havana

Neutron API の位置付け

Virtual Network

Virtual Router VM VM VM

Compute API L2/L3 API

Horizon, Heat or Orchestration

LB Service

VM

Process Based LB (HAProxy)

HW Appliance

LBaaS API

OpenStack が提供するのは Abstraction と Integration (≠ Virtualization)

Neutron には L2/L3 API と Advanced Service API が両方存在している。 両者を区別してみると、理解しやすいと思います。

Page 34: 20131211 Neutron Havana

おまけ

Page 35: 20131211 Neutron Havana

Neutron を使う上でのTips (1) • Network Namespace

– Linuxが持つネットワーク仮想化の機能で、1つの物理ホスト上に、 複数の独立したネットワーク機能を構成できる。 他の Namespace の影響を受けない。

– Neutronでは、IPアドレスが重複したネットワークを扱うために、Network Namespace を利用しています。

起動したVMの動作確認に ping を打とうとした際に、 制御サーバから Ping を打っても届きません。

Network Namespace 内からコマンドを実行する必要があります。

– 詳しくは “network namespace” で検索してください。 – 新しめのカーネルが使用されている Linux (Ubuntu 12.04など)では問題なく動作します。 RHEL6/CentOS6系ではそのままでは動作しないため、RDO で配布されているカーネルを使用する必要があります。

– 基本的には Network Namespace を有効にして Neutron を使うことを推奨します。

ip netns exec <netns-name> ping 192.168.1.10

Page 36: 20131211 Neutron Havana

Neutron を使う上での Tips (2) • ネットワークの操作は neutron コマンドで

– nova-manage network は使わないで下さい。 create コマンド自体は成功して、list でも表示されますが、何の意味もありません。Nova DBに書き込んでいるだけなので。

• KVM – (おそらく) /etc/libvirt/qemu.conf に以下の設定が必要です。 – Neutron では作成済みの tap device を指定してVMを起動します。そのため、QEMU が tap device を操作できるように設定が必要。 cgroup_device_acl = [

"/dev/null", "/dev/full", "/dev/zero", "/dev/random", "/dev/urandom", "/dev/ptmx", "/dev/kvm", "/dev/kqemu", "/dev/rtc", "/dev/hpet", "/dev/net/tun", ]