OpenStack の NSX Advanced Load Balancer との統合は IPv6 対応です。このセクションで説明する統合は、スケーラビリティとパフォーマンスの問題の解決に重点を置いた OpenStack Ocata に対してテストされています。
Software-Defined Networking (SDN) は Contrail をサポートします。
設定情報
一般的な設定では、NSX Advanced Load Balancer Controller は管理ネットワークでスピン アップされます(この場合は avimgmt
)。コントローラは、アクセス権のない OpenStack クラウドと一般的な OpenStack クラウドに対するテストに使用されます。サーバ インスタンスとクライアント インスタンスは、それぞれクライアント ネットワークとサーバ ネットワークに基づいてステートレス アドレス自動構成 (SLAAC) で起動されます。これらのインスタンスは、Dynamic Host Configuration Protocol バージョン 6 (DHCPv6) ステートフル ベースのクライアントまたはサーバ ネットワークのいずれかにあります。
ネットワーク トポロジ
次のネットワークの組み合わせが考慮されます。
IPv4 ネットワーク。
IPv6 ネットワーク。これは SLAAC、DHCPv6 ステートレス、DHCPv6 ステートフルに分類されます。これらは、ネットワークの作成時に Horizon ユーザー インターフェイスまたは OpenStack CLI から選択されます。
仮想サービスにはクライアント プレフィックスで始まるネットワークが選択され、バックエンド サーバにはサーバ プレフィックスで始まるネットワークが選択されます。
その結果、次のスクリーンショットに示すように、16 個のネットワークが考慮されます。
これは、考えられるすべてのシナリオをカバーするために行われ、正確な要件ではありません。
したがって、設定はワンアームと 2 アームの設定で構成され、それぞれ 1 つのネットワーク、または異なるネットワークにすべてが含まれる場合があります。このセクションでは、2 アーム設定を仮想サービスの作成(個別のネットワーク)に使用し、トラフィックが別のネットワーク上のサーバに送信されます。2 アームのセットアップでは、仮想サービスは 1 つのネットワークにあり、そのバックエンド サーバは別のネットワークにあります。
使用される IP アドレス指定スキーマ
仮想サービスは、ステートフル DHCPv6、SLAAC、または静的 IPv6 アドレス指定を使用して作成されます。この場合、IP アドレスは SLAAC v6 または DHCPv6 ステートフル ネットワークから選択され、IPv4 はインスタンスでも使用されます。
OpenStack はフローティング IPv6 アドレスをサポートしていません。したがって、次のようになります。
デュアルスタック仮想サービスの場合、フローティング IP アドレスは常にプライベート v4 VIP アドレスに変換 (NAT) されます。
IPv6 仮想 IP (VIP) アドレスの場合、デュアルスタック仮想サービスの場合と同様に、IPv6 VIP は、プライベートまたはパブリックに関係なく、配置を経由するためにプライベート IPv4 VIP ネットワークと同じインターフェイス上にある必要があります。
IPv4、IPv6、およびデュアルスタック ネットワークの次の組み合わせは、すべてのアドレス タイプをカバーします。
静的または手動の構成。
ステートレス アドレス自動構成 (SLAAC):IPv6 プレフィックス (/64) はルーター アドバタイズ (RA) を使用してエンド ノードに割り当てられ、ノードはアドレスのインターフェイス ID (IID) 部分(最後の /64 ビット)を自己構築します。
ステートフル DHCPv6:IPv4 DHCP と同様に、DHCPv6 サーバは IPv6 アドレス指定と構成オプション全体を処理します。
SE は、指定されたルーターからルート アドバタイズ (RA) を受信したときにのみ DHCPv6 クライアントを起動します。
ステートレス DHCPv6:アドレス割り当ての SLAAC と、DNS (Domain Name System) やドメイン名などのオプション割り当ての DHCPv6 の組み合わせが使用されます。
ネットワーク
これは設定に依存しないため、必要に応じて変更できます。
上記のネットワーク トポロジーで確認したように、すべてのネットワークはそれぞれの仮想 LAN (VLAN) 207 ネットワーク内でルーティングする必要があります。ここで、VLAN 207 はプロバイダ ネットワーク VLAN です。このルーティングには、ネットワーク内にルーターが必要です。
ルーターに接続されたインターフェイス
次のスクリーンショットに示すように、各ネットワークにはルーター(IPv4 または IPv6 ルーター)に接続されたインターフェイスが必要です。
IPv6 ルート アドバタイズ
ルーターは、IPv6 ルート アドバタイズ (RA) を処理するように構成されています。選択した IP アドレス指定スキーマが DHCPv6 の場合、SE での作業のために、OpenStack 全体で RA を送信する必要があります。同様に、IPv6 ネットワークが作成されたら、各 IPv6 ネットワークのリンク ローカル アドレス (LLA) を選択し、各 IPv6 ネットワークのデフォルト ゲートウェイとして更新します。この構成は次のとおりです。
root@openstack-ocata:~# ip netns | grep qrouter qrouter-3eeb3d41-8955-431c-b2bd-1934c97900a9 qrouter-017709bf-5ab1-43b5-a372-75c554c1b961
root@openstack-ocata:~# ip netns exec qrouter-017709bf-5ab1-43b5-a372-75c554c1b961 bash
ip a
次の出力に示すように、inet6 fe80::f816:3eff:fe88:18ff
値は IPv6 ネットワーク設定で更新される LLA です。
13: qr-c7e57476-e5@if109: mtu 1450 qdisc noqueue state UP group default qlen 1000 link/ether fa:16:3e:88:18:ff brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 700::1/64 scope global valid_lft forever preferred_lft forever inet6 fe80::f816:3eff:fe88:18ff/64 scope link valid_lft forever preferred_lft forever
セキュリティ グループ
一般的な OpenStack クラウドの場合、SE のセキュリティ グループ ルールが自動的に作成されます。
Orchestrator なしのクラウドの場合、アクセス権なしの OpenStack クラウドでの Heat テンプレートを使用したサービス エンジンの作成で説明されているサービス エンジンの作成のための手順を使用して SE を手動で起動する場合、Secure Shell (SSH) が機能するには、Internet Control Message Protocol (ICMP) でのトラフィックに対して IPv4 と IPv6 の特定のルールを許可する必要があります。22、80、443、8443 などのポートを開きます。8443 が例外として構成されていない場合、SE はコントローラに SSH 接続できず、その逆もできません。
allowed-address-pairs
allowed-address-pairs 拡張機能では、ポート属性が拡張されます。これにより、ネットワークに関連付けられているサブネットに関係なく、ポートを通過できる任意の mac_address
/ip_address
(Classless Inter-Domain Routing (CIDR)) ペアを指定できます。
一般的な OpenStack クラウドの場合、これはクラウド設定でデフォルトで有効になるため、これ以上の変更は必要ありません。
Orchestrator なしのクラウドの場合、OpenStack CLI または Horizon を使用して実行できます。
Neutron 拡張機能 allowed-address-pairs を使用すると、特定の CIDR を含むトラフィックをポートから出力できます。NSX Advanced Load Balancer は、この拡張機能を使用して VIP をサービス エンジン (SE) データに配置します。これにより、SE データ ポートの VIP は、これらのデータ ポートを介して VIP トラフィックを終了できます。
セキュリティ グループでパケットがドロップされないようにするため、allowed-address-pairs を SE ポートに追加します。MLS/OVS プラグインの場合は、各 SE ポートまたは特定の VIP アドレスに対して、0.0.0.0/0 と(必要に応じて IPv6 またはデュアルスタック-)::/0 を使用して allowed-address-pairs を 1 回追加できます。
NSX Advanced Load Balancer を使用して SDN タイプとして Contrail を使用する場合、VIP アドレスはここの説明に従って固定アドレス リストに追加されます。インターフェイス IP アドレスを区別するには、IPv4 または IPv6 のいずれであるかに基づいて、プレフィックス /24 または /120 を持つ同じペアを AAP に追加する必要があります。
neutron port-update da0e1e9a-312d-41c2-b15f-f10ac344ef03 --allowed-address-pairs type=dict list=true ip_address=192.168.1.222/32 neutron port-update da0e1e9a-312d-41c2-b15f-f10ac344ef03 --allowed-address-pairs type=dict list=true ip_address=2001::6/128
True の場合、allowed-address-pairs
拡張機能が使用されます。基盤となるネットワーク プラグインでこの機能がサポートされていない場合、VIP トラフィックは機能しません。
次のスクリーンショットは、IPv4(Orchestrator クラウドなし)の AAP エントリを示しています。
NSX Advanced Load Balancer の構成
OpenStack のための NSX Advanced Load Balancer のインストール手順に従って、OpenStack に NSX Advanced Load Balancer をインストールします。
仮想サービスおよびプール IPv6 構成に適切な IP アドレス指定メカニズム(SLAACv6 など)を使用します。
OpenStack ユーザー インターフェイスを使用してサブネット ID を取得するには、次に説明するように、openstack-horizon/networks/subnets/id または OpenStack CLI に移動します。
root@openstack-ocata:/root# openstack subnet show client-v4-network +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | allocation_pools | 192.168.10.2-192.168.10.254 | | cidr | 192.168.10.0/24 | | created_at | 2017-12-08T13:06:54Z | | description | | | dns_nameservers | | | enable_dhcp | True | | gateway_ip | 192.168.10.1 | | host_routes | | | id | 337c70de-3be5-4072-8e7f-04d61ee6ceb5 | | ip_version | 4 | | ipv6_address_mode | None | | ipv6_ra_mode | None | | name | client-v4-network | | network_id | 85b861a8-7d87-4e03-8cfe-444082ff1412 | | project_id | 39155680f7d24b628d9752057527ccb9 | | revision_number | 4 | | segment_id | None | | service_types | | | subnetpool_id | None | | updated_at | 2017-12-11T18:13:45Z | +-------------------+--------------------------------------+
IPv4 プールおよび IPv4 仮想サービス
IPv4 プールを構成するには、次の手順を実行します。
の順に移動します。
[プールの作成] をクリックします。
[名前] と [タイプ] の詳細を指定し、[クラウドと VRF の設定] をクリックします。
クラウドと VRF コンテキストの入力を指定し、[設定] をクリックします。
[サーバ] タブをクリックします。
IPv4 サーバの IP アドレスを指定し、[保存] をクリックします。
IPv4 仮想サービスを構成するには、次の手順を実行します。
[仮想サービスの作成] ドロップダウン メニューで [詳細設定] を選択します。
の順に移動し、[新しい仮想サービス] ページの [VIP アドレス] セクションで、[VS VIP] ドロップダウン メニューから [VS VIP の作成] をクリックします。
次のように、[VS VIP の作成] 画面が表示されます。
[VIP] の下にある [追加] をクリックします。
[VIP の編集] 画面で IPv4 アドレスを指定して、[保存] をクリックします。
[VS VIP の作成] 画面で [保存] をクリックします。
必要に応じて残りのタブの下にオプションの入力内容を入力し、[新しい仮想サービス] ウィンドウで [保存] をクリックします。
IPv4v6 プールおよび IPv4v6 仮想サービス(デュアル スタック)
デュアル スタック ネットワークでは、IPv4 または IPv6 アドレスを使用して仮想サービスが単一の VIP で作成された場合、IP アドレスを追加してデュアル スタックに変換すると失敗します。
デュアルスタック プールを構成するには、次の手順を実行します。
[プールの作成] をクリックします。
の順に移動し、[プールの作成] 画面で、[名前] と [タイプ] の詳細を指定し、[クラウドと VRF の設定] をクリックします。
[サーバ] タブで、次のように IPv4 または IPv6 サーバのいずれかの IP アドレスを指定します。
プールの作成を完了します。
デュアルスタック仮想サービスを構成するには、次の手順を実行します。
の順に移動します。
[仮想サービスの作成] ドロップダウン メニューで [詳細設定] を選択します。
[新しい仮想サービス] 画面で、[VS VIP] ドロップダウン メニューから [VS VIP の作成] をクリックします。
[VS VIP の作成] 画面で、[VIP] フィールドの下にある [追加] をクリックします。
次に示すように、IPv4 アドレス と IPv6 アドレスの値を指定します。
[保存] をクリックします。
トラブルシューティング:トラフィック キャプチャ
tcpdump コマンドを使用して、トラブルシューティング用のトラフィックをキャプチャします。キャプチャは、OpenStack の各 qr ネームスペースの qrouter
インターフェイス内で取得する必要があります。
SLAACv6 モードでは、一時 IP アドレスの生成は無効になっています。
SLAACv6 モードで一時 IP アドレスの生成が無効になっている NSX Advanced Load Balancer サービス エンジンでは、グローバル動的アドレスのみが設定されます。
5: eth2: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether fa:16:3e:10:7a:0c brd ff:ff:ff:ff:ff:ff inet6 1100::f816:3eff:fe10:7a0c/64 scope global dynamic valid_lft 86306sec preferred_lft 14306sec inet6 fe80::f816:3eff:fe10:7a0c/64 scope link valid_lft forever preferred_lft forever