20131211 Neutron Havana
-
Upload
akihiro-motoki -
Category
Technology
-
view
9.448 -
download
6
Transcript of 20131211 Neutron Havana
OpenStack が実現する仮想ネットワーク ~OpenStack Neutron~ [Havana Update]
Akihiro Motoki (@ritchey98) OpenStack Neutron Core Developer
Japan OpenStack Users Group Dec 11th, 2013
はじめに
• 本資料は 2012年12月の OSC Cloud での資料を 2013年12月時点での情報に更新したものです。
• LBaaS などの Network Advanced Service の情報を追加しています。
自己紹介
• 元木 顕弘 (@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
??? Neutron
OpenStack Project と Neutron
Compute
Storage
Network
Nova
Swift (Objects)
Glance (Images)
Cinder (Block)
identity Keystone
*-as-a-Service Capability OpenStack Service
Neutron の目的 #1
• Network-as-a-Service (NaaS) を提供する
–テナントが自由なネットワーク操作を提供
• 複数のプライベートなネットワークの作成
• IPアドレスの制御
–論理ネットワーク操作API
• 論理操作と物理操作を分離
• 物理レイヤーは Neutron (Plugin) が設定する
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, …)
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
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)
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
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
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
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 } } 一般ユーザー 管理者ユーザー
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 | +-----------------+--------------------------------------+
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 | +------------------+------------------------------------------------+
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 | +----------------+--------------------------------------------------------+
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
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
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
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
最近の構造
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 もあわせて制御
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 に展開し、ブロードキャストを削減する
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 にプロキシーする。
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
機能ブロックと配置
• Plugin Agent
– データトラフィックを扱うノードで動作させる必要あり
• Nova-compute ノード
• DHCP-agent が動作するノード
• L3-agent が動作するノード
• DHCP-agent, L3-agent
– いずれか一つのノードで動作させる必要あり
– L3-agent は外部ネットワークとの通信を行うため、専用ノードにするのが望ましい。
– 現状、Nova-network の multi_host 構成は未対応
ADVANCED NETWORK SERVICE
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)
サービス配置パターン
Network 1
External Network
Network 2
Network 1
FW on network
FW on Port (security group?)
FW on Router
Firewall
サービス配置パターン
Load Balancer
Network 1
Network 1
Network 1
Network 2
Direct Return
2-arm LB
1-arm LB
- terminated - Router
Network Service Insertion
Network 1 Network 2
External Network
VPN Connection
Service Insertion
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
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
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
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 が両方存在している。 両者を区別してみると、理解しやすいと思います。
おまけ
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
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", ]