20131211 Neutron Havana

11,420 views
11,176 views

Published on

Published in: Technology
0 Comments
21 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
11,420
On SlideShare
0
From Embeds
0
Number of Embeds
4,601
Actions
Shares
0
Downloads
225
Comments
0
Likes
21
Embeds 0
No embeds

No notes for slide

20131211 Neutron Havana

  1. 1. OpenStack が実現する仮想ネットワーク ~OpenStack Neutron~ [Havana Update] Akihiro Motoki (@ritchey98) OpenStack Neutron Core Developer Japan OpenStack Users Group Dec 11th, 2013
  2. 2. はじめに • 本資料は 2012年12月の OSC Cloud での資料を 2013年12月時点での情報に更新したものです。 • LBaaS などの Network Advanced Service の情報を追 加しています。
  3. 3. 自己紹介 • 元木 顕弘 (@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
  4. 4. OpenStack Project と Neutron *-as-a-Service Capability Compute OpenStack Service Nova Swift (Objects) Storage Cinder (Block) Glance (Images) identity Keystone Network Neutron ???
  5. 5. Neutron の目的 #1 • Network-as-a-Service (NaaS) を提供する – テナントが自由なネットワーク操作を提供 • 複数のプライベートなネットワークの作成 • IPアドレスの制御 – 論理ネットワーク操作API • 論理操作と物理操作を分離 • 物理レイヤーは Neutron (Plugin) が設定する
  6. 6. 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, …)
  7. 7. 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 と関連付けられる。 Nova VM1 10.0.0.2 VM2 10.0.0.3 virtual server virtual interface (VIF) virtual port Neutron Net1 10.0.0.0/24 L2 virtual network IPv6 virtual subnet
  8. 8. Neutron でできること TenantA-VM1 10.0.0.2 TenantA-VM2 10.0.0.3 Tenant-A Net1 10.0.0.0/24 External Net 88.0.0.0/18 TenantA-VM3 9.0.0.2 virtual server virtual interface (VIF) Tenant-A Net2 9.0.0.0/24 SNAT for external traffic Floating IP • ネットワークの自由な作成 • IP overlapping Tenant Networks • 複数 NIC を持った VM の)作成 • ルータ経由で Subnet 間通信 • Floating IP での外部からの接続 (Elastic IP@AWS) virtual port L2 virtual network virtual subnet
  9. 9. Tenant View vs Infra View Tenant-A VM VM net2 VM R net1 VM Internet Tenant-A VM net1 R VM Tenatn View Infra (Provider) View VM VM vSwitch VM VM vSwitch VM VM vSwitch Internet SW Data Center Network SW GW
  10. 10. Tenant View vs Infra View • Neutron は論理操作をユーザに提供 • 物理操作はプラグイン or NW Controller が行う Tenant-A VM User VM net2 VM R net1 VM Internet Tenant-A REST API VM net1 R VM Neutron Tenatn View Nova Infra (Provider) View Plugin NW Controller VM VM vSwitch VM VM vSwitch VM VM vSwitch Internet SW Data Center Network SW GW
  11. 11. 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
  12. 12. Network API の例 • API モデルは基本的に REST • 一般ユーザー向けの API では、論理情報のみが見える • 管理者権限であれば、物理情報を指定した操作も一部では定義。 GET http://localhost:9696/v2.0/networks/20b49737c718-4f10-8edc-7fe9f8ee7cfd GET http://localhost:9696/v2.0/networks/20b49737c718-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" } "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 } } 一般ユーザー } 管理者ユーザー
  13. 13. 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 | +-----------------+--------------------------------------+
  14. 14. 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 | +------------------+------------------------------------------------+
  15. 15. 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 | +----------------+--------------------------------------------------------+
  16. 16. Neutron Architecture • 物理ネットワークの制御は Neutron Plugin が行う。 • Plugin を切り替えることで、様々なネットワーク技術を利用 できる。現在は同時には一種類のみ利用可。 CLI / Dashboard (Horizon) / Orchestration Tool Nova API Neutron API Nova Neutron Nova Compute Nova Compute VM VM Neutron Plugin agent Physical Network VM Virtual Switch agent HW Switch VM Virtual Switch
  17. 17. CLI / Dashboard (Horizon) / Orchestration Tool Nova API Neutron API Nova Neutron Nova Compute Nova Compute VM VM Neutron Plugin agent Physical Network VM Virtual Switch agent HW Switch VM Virtual Switch
  18. 18. OpenStack と OpenFlow の連携 CLI / Dashboard (Horizon) / Orchestration Tool Neutron API Nova API Neutron Nova NEC OpenFlow Plugin Nova Compute VM OFC API OpenFlow Controller agent Nova Compute VM VM agent Virtual Switch Virtual Switch OpenFlow Protocol Network VM HW Switch
  19. 19. 最近の構造 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
  20. 20. 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 もあわせて制御
  21. 21. 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 に展開し、ブロードキャストを削減する
  22. 22. 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 にプロキ シーする。
  23. 23. 機能ブロックと配置 External network Management Network eth0 eth2 eth0 eth0 eth0 Compute Node Controller Node Nova Compute Nova Compute Plugin Agent Plugin Agent OVS (br-int) Neutron Server DHCP agent L3 agent metadata agt Network Node Plugin Agent Nova(CC) Compute Node OVS (br-int) OVS (br-int) eth1 eth1 eth1 OVS (br-ex) Data Network
  24. 24. 機能ブロックと配置 • Plugin Agent – データトラフィックを扱うノードで動作させる必要あり • Nova-compute ノード • DHCP-agent が動作するノード • L3-agent が動作するノード • DHCP-agent, L3-agent – いずれか一つのノードで動作させる必要あり – L3-agent は外部ネットワークとの通信を行うため、専 用ノードにするのが望ましい。 – 現状、Nova-network の multi_host 構成は未対応
  25. 25. ADVANCED NETWORK SERVICE
  26. 26. 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)
  27. 27. サービス配置パターン Firewall Network 1 FW on Port (security group?) Network 2 Network 1 FW on Router External Network FW on network
  28. 28. サービス配置パターン Load Balancer 2-arm LB 1-arm LB Network 1 Network 1 - terminated - Router Network 1 Direct Return Network 2
  29. 29. Network Service Insertion Service Insertion Network 2 Network 1 External Network VPN Connection
  30. 30. 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
  31. 31. 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
  32. 32. 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
  33. 33. Neutron API の位置付け Horizon, Heat or Orchestration LBaaS API HW Appliance Process Based LB (HAProxy) LB Service VM Compute API L2/L3 API Virtual Router VM VM VM Virtual Network OpenStack が提供するのは Abstraction と Integration (≠ Virtualization) Neutron には L2/L3 API と Advanced Service API が両方存在している。 両者を区別してみると、理解しやすいと思います。
  34. 34. おまけ
  35. 35. Neutron を使う上でのTips (1) • Network Namespace – Linuxが持つネットワーク仮想化の機能で、1つの物理ホスト上に、 複数の独立したネットワーク機能を構成できる。 他の Namespace の影響を受けない。 – Neutronでは、IPアドレスが重複したネットワークを扱うために、 Network Namespace を利用しています。 起動したVMの動作確認に ping を打とうとした際に、 制御サーバから Ping を打っても届きません。  Network Namespace 内からコマンドを実行する必要があります。 ip netns exec <netns-name> ping 192.168.1.10 – 詳しくは “network namespace” で検索してください。 – 新しめのカーネルが使用されている Linux (Ubuntu 12.04など)では問 題なく動作します。 RHEL6/CentOS6系ではそのままでは動作しないた め、RDO で配布されているカーネルを使用する必要があります。 – 基本的には Network Namespace を有効にして Neutron を使うことを 推奨します。
  36. 36. 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", ]

×