OpenStack が実現する仮想ネットワーク
~
OpenStack Quantum の紹介~
Akihiro Motoki (@ritchey98)
OpenStack Quantum Core Developer
Japan OpenStack Users Group
自己紹介
• 元木 顕弘
Twiter: @ritchey98
• 某電気系メーカの研究所に所属
–
IPルータ、広域Ethernet装置、迷惑メールフィルタなど
の開発をやっていました。
の開発をやっていました。
– 最近は
OpenStack, OpenFlow 周りで活動しています。
•
Linux JM Project
– 皆さん日本語マニュアル必要ですか。いつやめても
いいです
(^^;
OpenStack Project と Quantum
Compute
Nova
Swift (Objects)
*-as-a-Service Capability
OpenStack Service
Storage
Network
Glance (Images)
Quantum
Cinder (Block)
identity
Keystone
Quantum の目的 #1
•
Network-as-a-Service (NaaS) を提供する
– テナントが自由なネットワーク操作を提供
• 複数のプライベートなネットワークの作成
•
IPアドレスの制御
•
IPアドレスの制御
– 論理ネットワーク操作
API
• 論理操作と物理操作を分離
• 物理レイヤーは
Quantum (Plugin) が設定する
Quantum の目的 #2
• 複数のネットワーク技術に対応
– データセンタでは新たな要件が発生
•
multi tenancy, remote data center, VM mobility, advanced
network services, …
–
Nova は VLAN + Linux iptables のみが利用可能
–
Nova は VLAN + Linux iptables のみが利用可能
– 新しいネットワーク技術に対応できるアーキテクチャ
•
SDN/OpenFlow-based network
•
Overlay tunneling (VXLAN, NVGRE, STT, …)
•
L2 Fabric (Fabric Path, QFabric, …)
Quantum 仮想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.2Nova
Quantum
L2 virtual network
VM210.0.0.3
virtual port
virtual server
virtual interface (VIF)
virtual subnet
10.0.0.0/24
IPv6
Quantum でできること
TenantA-VM1 10.0.0.2 TenantA-VM1 10.0.0.2 TenantA-VM3 TenantA-VM3 9.0.0.2 TenantA-VM2 10.0.0.3 TenantA-VM2 10.0.0.3Tenant-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
• ネットワークの自由な作成
•
IP overlapping Tenant Networks
External
88.0.0.0/18
External
Net
88.0.0.0/18
SNAT for external traffic
Floating IP
• 複数
NIC を持った VM の)作成
• ルータ経由で
Subnet 間通信
Tenant View vs Infra View
Tenant-A VM VM net2 VM VM net1 R Tenant-A VM VM net1 RInternet
Infra (Provider) View
VM
Tenatn View
Data Center Network
Internet
GW
vSwitch
VM VM
vSwitch
VM VM
vSwitch
VM VM
SW
SW
Tenant View vs Infra View
Tenant-A VM VM net2 VM VM net1 R Tenant-A VM net1 RInternet
User
•
Quantum は論理操作をユーザに提供
• 物理操作はプラグイン
or NW Controller が行う
REST API
Infra (Provider) View
VM
VM net1
R
Tenatn View
Data Center Network
Internet
GW
vSwitch
VM VM
vSwitch
VM VM
vSwitch
VM VM
Quantum
NW
Controller
SW
SW
Nova
Plugin
REST API
Quantum API
•
Network, Subnet, Port のそれぞれに対して
List, Create, Read, Update, Delete 操作を
REST API で行う。
–
net-create, net-update, net-delete,
net-list, net-show
net-list, net-show
–
subnet-create, subnet-update, subnet-delete,
subnet-list, subnet-show
–
port-create, port-update, port-delete,
Quantum API (network)
$ quantum net-create net1 Created a new network:
+---+---+ | Field | Value | +---+---+ | admin_state_up | True | | admin_state_up | True | | id | a5d04085-3a15-470f-adca-b67c0958a829 | | name | net1 | | router:external | False | | shared | False | | status | ACTIVE | | subnets | | | tenant_id | c3ed8c16308642de9b15647759d9e5e9 | +---+---+
Quantum API (subnet)
$ quantum subnet-create 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 | | | dns_nameservers | | | enable_dhcp | True | | gateway_ip | 172.16.1.1 | | host_routes | | | id | 736b30c1-5b83-4b52-b5ac-a397273cb240 | | ip_version | 4 | | name | | | network_id | a5d04085-3a15-470f-adca-b67c0958a829 | | tenant_id | c3ed8c16308642de9b15647759d9e5e9 | +---+---+
Quantum API (port)
$ quantum port-show 332d3288-5d7a-4ea9-8af6-9b5c82615bb2
+---+---+ | Field | Value | +---+---+ | admin_state_up | True | | device_id | d8b5dc3c-f73c-44bf-9c04-13f986cf5e6b | | device_owner | compute:nova | | 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 | | | network_id | 6d013e3f-7ea9-402c-9725-9cb693809988 | | status | ACTIVE | | tenant_id | 34657b6768184444af7b5081213e6e73 | +---+---+
VM Launching (2)
nova boot --flavor 1 --image 58ba017b-dd22-492f-a826-b8c72a133be0
--nic net-id=45fe25eb-f5ef-43b1-b006-6878c1643111 server1
Quantum Architecture
• 物理ネットワークの制御は
Quantum Plugin が行う。
•
Plugin を切り替えることで、様々なネットワーク技術を利用
できる。現在は同時には一種類のみ利用可。
CLI / Dashboard (Horizon) / Orchestration Tool
Quantum API Nova API
Quantum Nova Quantum Plugin Nova Compute Virtual Switch VM VM Nova Compute Virtual Switch VM VM HW Switch Physical Network agent agent
Quantum
OpenStack と OpenFlow の連携
Nova
NEC OpenFlow Plugin
Nova Compute
Nova Compute
CLI / Dashboard (Horizon) / Orchestration Tool
Quantum API
Nova API
Nova Compute
Virtual Switch
VM
VM
Nova Compute
Virtual Switch
VM
VM
HW Switch
OpenFlow Controller
Network
OFC API
OpenFlow Protocol
agent agentQuantum Plugin
• 現在
Mainline に入っているもの
•
NW Controller なし
–
Open vSwitch Plugin (VLAN, GRE)
–
Linux Bridge Plugin (VLAN)
•
SDN/OpenFlow 系
–
Nicira NVP Plugin
–
Nicira NVP Plugin
–
Ryu Plugin
–
NEC OpenFlow Plugin
•
Trema SliceableSwitch (OSS)
•
ProgrammableFlow
–
Big Switch Plugin
• その他
Quantum の機能ブロック
•
Quantum Server
– 論理ネットワークの管理を行う
–
Plugin は Quantum Server の一部
•
Agent
–
Quantum Server 以外のサービスプロセス。Quantum Server 以外の
サーバでも動作可能。
–
Plugin
–
Plugin の実現方式に応じて、必要に応じて使用する。
実現方式次第では
Agent は不要。
•
Plugin Agent
–
vSwitch の情報取得、設定を行う
•
DHCP Agent
– 仮想
NW単位のDHCPサーバの管理を行う
•
L3 Agent
– 論理ルータの操作を行う。論理ルータは、
iptables を利用して実現
Nova(CC)
Quantum Server
Compute Node Compute Node eth0
eth0 eth0
Nova
Compute
Compute
Nova
Management Network
機能ブロックと配置
eth0 DHCP agent L3 agent OVS (br-ex) eth2 External network Server Data Network eth1 eth1 OVS(br-int) (br-int)OVS
Compute
Compute
Plugin Agent Plugin Agent
Controller Node eth1 OVS (br-int) L3 agent Plugin Agent Network Node
機能ブロックと配置
•
Plugin Agent
– データトラフィックを扱うノードで動作させる必要あり
•
Nova-compute ノード
•
DHCP-agent が動作するノード
•
L3-agent が動作するノード
•
DHCP-agent, L3-agent
•
DHCP-agent, L3-agent
– いずれか一つのノードで動作させる必要あり
–
L3-agent は外部ネットワークとの通信を行うため、
Nova-Compute ノードとは別ノードにするのが望まし
い。
– 現状、
Nova-network の multi_host 構成は未対応
Quantum を使う上での注意点 (1)
•
Network Namespace
–
Linuxが持つネットワーク仮想化の機能で、1つの物理ホスト上に、
複数の独立したネットワーク機能を構成できる。
他の
Namespace の影響を受けない。
–
Quantumでは、IPアドレスが重複したネットワークを扱うために、
Network Namespace を利用しています。
起動した
VMの動作確認に ping を打とうとした際に、
起動した
VMの動作確認に ping を打とうとした際に、
制御サーバから
Ping を打っても届きません。
Network Namespace 内からコマンドを実行する必要があります。
– 詳しくは
“network namespace” で検索してください。
– 最近の
Ubuntu(12.04など)では問題なく動作しますが、
RHEL6/CentOS6系では現状は動作しません。
•
Quantumの設定で Network Namespace を使用しないようにすることもできま
す。
Quantum を使う上での注意点 (2)
• ネットワークの操作は
quantum コマンドで。
–
nova-manage network は使わないで下さい。
create コマンド自体は成功して、list でも表示されますが、何の
意味もありません。
Nova DBに書き込んでいるだけなので。
–
Grizzly で、Quantum が有効になっていると、nova-manage
network でエラーが出るようになるかもしれません。
•
KVM
•
KVM
–
/etc/libvirt/qemu.conf に設定が必要です。
–
Quantum では作成済みの 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", ]