20161129 neutron recent topic
TRANSCRIPT
今日のアジェンダ
最近のトピックについて、適当に取り上げます。
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/