20161129 neutron recent topic

16
OpenStack Neutron 最近のトピック Akihiro Motoki Nov 29, 2016

Upload: akihiro-motoki

Post on 12-Jan-2017

322 views

Category:

Internet


1 download

TRANSCRIPT

OpenStack Neutron の最近のトピックAkihiro Motoki

Nov 29, 2016

今日のアジェンダ

最近のトピックについて、適当に取り上げます。

Subnet Pool

Address Scope

Dynamic Routing

Get Me A Network

VLAN aware VM

RBAC

他に聞きたい内容があれば可能な範囲で対応します。

Neutron の Network Model

テナントは複数の Network を作成できる

Network には Subnet (CIDR, GW等) を関連付ける。

IPアドレスの払い出し (IPAM)、テナント間での IP アドレス重複にも対応

Networkに複数のPort を作成できる。(L2SWのポートのイメージ)

VM の仮想NICはやルータのINF は Port と関連付けられる。

TenantA-VM110.0.0.2

TenantA-VM39.0.0.2

TenantA-VM210.0.0.3

External Net88.0.0.0/18

Tenant-A Net110.0.0.0/24

Tenant-A Net29.0.0.0/24

L2 virtual network

virtual server

virtual interface (VIF)

virtual subnet

SNAT for external trafficFloating IP

Neutron

Subnet Pool

<要望>

サブネットを作るときに、どの CIDR を使っていないか考えて作る必要があった。いちいち使っていない CIDR を考えるのは面倒。

IaaS 管理者側で、使って良いアドレス範囲を定義したい。

NAT を行わない場合、テナント間で重複しないアドレス範囲を払い出したい

IPv6 ネットワークでは Floating IP サポートなし

外部ネットワークからプロジェクトネットワークに NAT なしでルーティングする場合

Subnet Pool

IP Address の Prefix Pool を作成しておいて、そこからアドレスを払い出す。

neutron subnetpool-create

--pool-prefix 203.0.113.0/24 --default-prefixlen 26

--shared --is-default demo-subnetpool

neutron subnet-create --subnetpool demo-subnetpool --ip-version 4 demo-net

neutron subnet-create --use-default-subnetpool --ip-version 4 demo-net

neutron subnetpool-update

--pool-prefix 203.0.113.0/24 --pool-prefix 198.51.100.0/24 demo-subnetpool

Subnet Pool

Pool Prefixes203.0.113.0/24

Prefix Lengthdefault: 26

Max: 25, Min: 28

Subnet 1203.0.113.0/26

Subnet 2203.0.113.128/25

Subnet 3203.0.113.64/27

Address Scope

どのアドレスどうしが通信可能かを制御するもの

Address Scope は Subnet Pool に関連付ける

ルーターは、接続されたインターフェースの Network の Subnet CIDR が所属する Address Scope を特定し、同じ Scope の場合のみ転送を行う

Net1

R

Net2

Net3

同じAddress Scope に属すネットワーク

は通信可能

違う Address Scope に属すネットワーク間は通信不可

Subnet

pool

Address

Scope

Subnet

pool

Address

Scope

(or CIDR直接指定) CIDR直接指定の場合は

Implicit Address Scopeとして扱われる

Address Scope

管理者が許可されたアドレス範囲のみを外部と通信させる方法

外部と通信可能な shared の Subnet Pool を作成しておく

External Network の Subnet を Address Scope に関連付けておく

テナントユーザーは外部と通信したい場合は shared Subnet Pool からSubnetを作成

テナントユーザーが CIDR を直接指定したサブネットでは、同じアドレス帯であっても外部と通信不可

Net1

R

Net2

Net3違う Address Scope に属すネットワーク間は通信不可

Subnet

pool

Address

Scope

Subnet

pool

Address

Scope

(or CIDR直接指定) CIDR直接指定の場合は

Implicit Address Scopeとして扱われる

External Net

BGP Dynamic Routing

BGP を使って、テナントNWのCIDR情報を Upstream Router に広告する

フラットなアドレスデザインを行っているケースで有効

Self Service Network 110.1.1.0/24

Self Service Network 210.2.2.0/24

Self Service Network 310.3.3.0/24

Router1

203.0.113.1

10.1.1.1

Router2

203.0.113.2

10.2.2.1

Router3

203.0.113.3

10.3.3.1

Address Scope

Upstream

Router

Provider Network(router:external)

L3 agent

BGP agent

BGP peering

Internet

AS 4321

AS 1234

Get Me A Network

シンプルなクラウドユースケースにおいて、単に VM を作りたいだけなのに、わざわざ、ネットワークを作って、ルーターを接続して、、、というのは面倒、という声あり。

VM 起動時に、プロジェクトに Neutron ネットワークがなければ自動的に作成し、VM をそのネットワークに接続できるようになった。

Newton で Nova 側の対応が完了。Neutron: auto-allocated-topology

従来 Get me a network

# create network

# create subnet

# nova boot --nic net-id

#nova boot --nic auto

--nic noneを指定すると、ネットワークのないVMを起動することも可能になった

VLAN aware VM (trunk port)

VLAN Tag は VM に入ってくる前に削除されていたため、VMではつなぐネットワーク数の vNICを作成する必要があり、スケーラビリティに課題。

ネットワークを動的に増やす際には vNICを増やす hotplug対応が必要だった。

VLAN aware VM 機能により、VLAN タグで識別できるようになり、VM に接続する vNICを削減し、ネットワークの動的な拡張も容易になった。

VM

vNIC1

vNIC2

vNIC3

vNIC4

Network1

Network2

Network3

Network4

VM

Network1

Network2

Network3

Network4

Trunk

VLAN1

VLAN2

VLAN3

VLAN4

従来 VLAN aware VM

VLAN aware VM

Check “trunk” and “trunk-details” extensions are enabled.

openstack extension list –network | grep trunk

Trunk の作成

openstack port create --network trunk-net trunk-port

openstack network trunk create --parent-port <port ID> trunk

サブポートの Trunk への追加

openstack port create --network trunked-net trunked-port

openstack network trunk set --subport ¥port=<trunked-port ID>,segmentation-type=vlan,segmentation-id=100 ¥trunk

インスタンスの起動

openstack server create --nic port-id=<parent-port ID>

RBAC

RBAC = Role Based Access Control

従来の Neutron では、リソースは Private か Shared のみ

RBAC 機能を使うと、指定したプロジェクトとだけリソースを共有できる

あるプロジェクトとだけネットワークを共有する、など

現在サポートされているのは “Network” と “QoS policy” のみ

RBAC

Network でサポートされている共有モード

ネットワークへのポート作成を許可 (Shared Flag 相当)

Router Gateway ポートの作成 (External Network 相当)

用途:特定のユーザー専用の External Network を作成する

neutron rbac-create --target-tenant <project ID> --type network

--action access_as_shared <object ID>

neutron rbac-create --target-tenant <project ID> --type network

--action access_as_external <object ID>

neutron rbac-list

まとめ

最近の Neutron に導入されたコンセプトについて紹介しました。

最近はドキュメントに力をいれており、今日お話した内容の多くは OpenStack

Networking Guide にも書かれています。

http://docs.openstack.org/newton/networking-guide/

おまけ

OpenStack Logo が変わりました

https://www.openstack.org/brand/openstack-logo/