• 検索結果がありません。

インタフェースの作成 3) インタフェースの設定

ドキュメント内 2 (ページ 45-60)

API(HTTP)

2) インタフェースの作成 3) インタフェースの設定

- インタフェースの検知

- ポート情報の取得

- インタフェースの設定

ホストの実行環境設定

ovs_neutron_plugin.ini 設定例

(vlanの範囲として、100~199を使用するとした例)

(eth2というのは一例)

tenant_network_type = vlan

network_vlan_ranges = default:100:199 bridge_mappings = default:br-eth2

vlan 100~199を通すようにしておく

compute node eth2

ovs_neutron_agent br-eth2

br-int

ホスト(compute node)起動時に行うこと

• agent(ovs_neutron_agent)

の起動

内部折り返し用(br-int)と外部通信用(br-eth2)の2つのスイッチの作成と設定

補足:

Openvswitchプラグインではネットワーク分離の手段と

して、

gre

vxlan

も使用可能。構成定義やスイッチの構成 は、本例と異なる。

テナント用ネットワーク作成

47

$ neutron net-create net1 Created a new network:

+---+---+

| Field | Value | +---+---+

| admin_state_up | True |

| id | fa2ba33b-b50f-47c2-8c41-ddca7a481dc6 |

| name | net1 |

| provider:network_type | vlan |

| provider:physical_network | default |

| provider:segmentation_id | 100 |

| router:external | False |

| shared | False |

| status | ACTIVE |

| subnets | |

| tenant_id | 4d447d1234fb47feaebf657ea876a845 | +---+---+

プラグイン固有属性

本例では、ネットワーク

net1

は、

vlan id 100

でノード間の通信を行う。

(vlan idは、ネットワーク作成時にパラメータで指定することも可能)

 Neutron API (create network) の処理の中で、プラグインが

ネットワーク ID と vlan-id の対応をつけ、 DB に記録。

ポートの作成

 (Neutron から見た ) 使用者が事前に作成を行う。

 VM の NIC を表現するリソースとして、ポートを使用する。

$ neutron port-create net1 Created a new port:

+---+---+

| Field | Value | +---+---+

| admin_state_up | True |

| allowed_address_pairs | |

| binding:capabilities | {"port_filter": false} |

| binding:host_id | |

| binding:vif_type | unbound |

| device_id | |

| device_owner | |

| fixed_ips | {"subnet_id": "0b5be9b5-571b-4d26-bb2a-d25d661909dc", "ip_address": "20.0.0.11"} |

| id | 8c77dea8-0d25-4dde-9165-9d2595cd9375 |

| mac_address | fa:16:3e:b5:54:65 |

| name | |

| network_id | fa2ba33b-b50f-47c2-8c41-ddca7a481dc6 |

| security_groups | 855c2304-a4f0-4f07-a60c-e8e6ae8e5674 |

| status | DOWN |

| tenant_id | 4d447d1234fb47feaebf657ea876a845 | +---+---+

ip

アドレス、

mac

アドレスは、この段階で確定。

インタフェースの作成

49

VM

を起動するホストが決まると、

nova-compute

は、

VM

の起動に 先立ち、ホスト上にポートに対応するインタフェースを作成する。

nova-compute

に組み込まれた

Interface

ドライバが以下を実施。

br-int

VM

tap8c77dea8-0d

• VM

の仮想NICに対応するtapデバイスを作成し、br-intに接続する。

デバイス名は、”tap”+ポートIDの先頭11桁

• ovs

ポートの

Interface

テーブルに必要な情報を設定しておく。

- external-ids:iface-id

にポート

ID

- external-ids:attached-mac にmacアドレス

ポイント:

後でagent等がインタフェースとポートの対応を特定できるようにしておく。

$ ifconfig ...

tap8c77dea8-0d Link encap:Ethernet HWaddr 1a:fe:53:16:54:45

inet6 addr: fe80::18fe:53ff:fe16:5445/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:373 errors:0 dropped:0 overruns:0 frame:0 TX packets:179 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500

RX bytes:68692 (68.6 KB) TX bytes:35044 (35.0 KB)

$ sudo ovs-vsctl list-ports br-int int-br-eht2

tap8c77dea8-0d

$ sudo ovs-vsctl list Interface

_uuid : d13469a0-a5f6-4b36-bed6-709c22e82e1b admin_state : up

...

external_ids : {attached-mac="fa:16:3e:b5:54:65",

iface-id="8c77dea8-0d25-4dde-9165-9d2595cd9375", iface-status=active,

vm-uuid="a66595e0-b318-49ae-98d5-564b7b42bfbf"}

ingress_policing_burst: 0 ingress_policing_rate: 0 lacp_current : []

link_resets : 1

link_speed : 10000000 link_state : up

mac : []

mtu : 1500

name : "tap8c77dea8-0d"

ofport : 11 ...

Interfaceの作成、OVSへの接続、

OVSのInterfaceテーブルへの情報設

定は、

Nova

Interface

ドライバが実施。

インタフェースの検知

51

 インタフェースの作成を検知する手段を用意している。

ovs_neutron_agent では:

• br-int を定期的に監視し、 ovs ポートの作成を認識

 他の検知方法としては、

• VM からの最初の送出パケットで認識

• openvswitch の ovs ポート作成を認識

などが考えられる。

ポート情報の取得

 インタフェースに対応するポートの情報を取得する。

ovs_neutron_agent では:

• RPC を使用し、 neutron-server ( 内 openvswitch プラグイン ) から取得。

デバイス名をパラメータとし、ポートおよびネットワーク情報を 返す RPC が用意されている。 ( ポート ID の先頭 11 桁で識別 )

ポート ID として、 ovs ポートに設定された情報を使用することも可能。

インタフェースの設定

53

 実際に通信できるための設定を行う。

ovs_neutron_agent では:

• ovs ポートへの tag の設定

これを行うまで、 VM の通信はできない。

• ノード間通信に必要な設定

ネットワークに割り当てられた vlan タグはノード間通信時のみ 付加される。 ( 細かい設定内容は割愛 )

• その他、セキュリティグループの設定なども agent で行っている。

補足:

ポートの更新・削除については、

neutron-server

から

ovs_neutron_agent

への通知(非同期

RPC

)を契機に 必要な処理を行っている。

参考: HavanaML2 プラグイン

 Open vSwitchプラグインとLinuxBridgeプラグインが統合された、

ML2

プラグインというものができた

(devstack

のデフォルトも

ML2

になった

)

ML2

とは

タイプドライバ、メカニズムドライバの

2

つの階層からなる。

タイプドライバ

物理ネットワークの分離タイプに応じて処理を実行。

タイプ: vlan、gre、vxlan、、、

メカニズムドライバ

物理インタフェースの種別に応じて処理を実行。

Ex. openvswitch

linuxbridge

、、、

新規のコアプラグインをサポートしたい場合、個別のプラグインを 作成する代わりに、

ML2

のメカニズムドライバという形で実装する 選択肢ができた。

これまでのスライドで説明した内容は、

ML2

になっても変わらない。

ML2

Open vSwitch

メカニズムドライバを使用したときと同じ動き

(Agent

側は変わらない

)

L3 拡張機能の実装

55

L3 拡張機能の実装

 neutron-l3-agent

プロセスが処理を行う。

ルータの実体は、Linux上の独立したネットワーク名前空間で定義され たインタフェース、ルーティングテーブル、

iptables

 neutron-server

からの通知

(

リソース作成・更新・削除

)

を契機に処理を 行う。通知を受けたら、

neutron-server

からリソースの情報を取得し、リ ソースの現状値に物理的実装を合わせる。

ルータ作成時

ルータ用のネットワーク名前空間を作成。

外部ネットワークポート、内部ネットワークポート接続時 ポートに対応するインタフェース作成、設定

l3_agent

に組み込まれたインタフェースドライバが作成し、

ovs_neutron_agent

が検知、設定を実施。)

フローティング

IP

が固定

IP

に関係付けられたとき

iptables(NAT) の設定を行う。

57

br-eth2 br-int

ルーティングテーブル

iptables

ovs_neutron_agent

routerB routerA

作成、設定、削除

VM間通信用

外部ネットワーク

br-ex

ルーティングテーブル

iptables

neutron-l3-agent

interfaceドライバ

neutron-server RPC

通信できるまでの仕掛けは、 L2 のときと同様。

以下の読み替えを行えばよい。

compute node nova-compute VM

VM のポート、インタフェース ovs_neutron_agent

network node neutron-l3-agent ルータ用 namespace

ルータのポート、インタフェース

同左

59

$ ip netns list

qdhcp-c6943641-2937-4e68-b010-53e14002d954 qrouter-5e37b0c6-9f85-40cd-9d06-fb6f814448e6

$ sudo ip netns exec qrouter-5e37b0c6-9f85-40cd-9d06-fb6f814448e6 ifconfig lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0 ...

qg-f1e3b587-81 Link encap:Ethernet HWaddr fa:16:3e:47:f1:9b

inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0 ...

qr-e84c655e-8a Link encap:Ethernet HWaddr fa:16:3e:1f:7e:7a inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.255.255.0 ...

qr-f03226bf-a4 Link encap:Ethernet HWaddr fa:16:3e:61:4b:81 inet addr:10.0.1.1 Bcast:10.0.1.255 Mask:255.255.255.0 ...

$ sudo ip netns exec qrouter-5e37b0c6-9f85-40cd-9d06-fb6f814448e6 route -n Destination Gateway Genmask Flags Metric Ref Use Iface

0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 qg-f1e3b587-81 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 qr-e84c655e-8a 10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 qr-f03226bf-a4 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 qg-f1e3b587-81

$ sudo ip netns exec qrouter-5e37b0c6-9f85-40cd-9d06-fb6f814448e6 iptables -L -t nat ...

DNAT all -- anywhere 192.168.0.3 to:10.0.0.3 ...

SNAT all -- 10.0.0.0/24 anywhere to:192.168.0.2 SNAT all -- 10.0.1.0/24 anywhere to:192.168.0.2 ...

名前空間

interface

net-ext net1

net2

ルーティング テーブル

NAT

参考:その他サービスの実装

基本的な構造は、 L3 と同じ。

ドキュメント内 2 (ページ 45-60)

関連したドキュメント