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 アドレスをサポートしていません。したがって、次のようになります。

  1. デュアルスタック仮想サービスの場合、フローティング IP アドレスは常にプライベート v4 VIP アドレスに変換 (NAT) されます。

  2. 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 ルーター)に接続されたインターフェイスが必要です。

図 1. rtr-v4 の IPv4 インターフェイス
図 2. rtr-ext-v6 の 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)) ペアを指定できます。

  1. 一般的な 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 の構成

  1. OpenStack のための NSX Advanced Load Balancer のインストール手順に従って、OpenStack に NSX Advanced Load Balancer をインストールします。

  2. 仮想サービスおよびプール IPv6 構成に適切な IP アドレス指定メカニズム(SLAACv6 など)を使用します。

  3. 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 プールを構成するには、次の手順を実行します。

  1. [アプリケーション] > [プール] の順に移動します。

  2. [プールの作成] をクリックします。

  3. [名前][タイプ] の詳細を指定し、[クラウドと VRF の設定] をクリックします。

  4. クラウドと VRF コンテキストの入力を指定し、[設定] をクリックします。



  5. [サーバ] タブをクリックします。

  6. IPv4 サーバの IP アドレスを指定し、[保存] をクリックします。

IPv4 仮想サービスを構成するには、次の手順を実行します。

  • [アプリケーション] > [仮想サービス] の順に移動し、[仮想サービスの作成] ドロップダウン メニューで [詳細設定] を選択します。

  • [新しい仮想サービス] ページの [VIP アドレス] セクションで、[VS VIP] ドロップダウン メニューから [VS VIP の作成] をクリックします。

  • 次のように、[VS VIP の作成] 画面が表示されます。



  • [VIP] の下にある [追加] をクリックします。

  • [VIP の編集] 画面で IPv4 アドレスを指定して、[保存] をクリックします。

  • [VS VIP の作成] 画面で [保存] をクリックします。

  • 必要に応じて残りのタブの下にオプションの入力内容を入力し、[新しい仮想サービス] ウィンドウで [保存] をクリックします。

IPv4v6 プールおよび IPv4v6 仮想サービス(デュアル スタック)

注:

デュアル スタック ネットワークでは、IPv4 または IPv6 アドレスを使用して仮想サービスが単一の VIP で作成された場合、IP アドレスを追加してデュアル スタックに変換すると失敗します。

デュアルスタック プールを構成するには、次の手順を実行します。

  1. [アプリケーション] > [プール] の順に移動し、[プールの作成] をクリックします。

  2. [プールの作成] 画面で、[名前][タイプ] の詳細を指定し、[クラウドと VRF の設定] をクリックします。

  3. [サーバ] タブで、次のように IPv4 または IPv6 サーバのいずれかの IP アドレスを指定します。



  4. プールの作成を完了します。

デュアルスタック仮想サービスを構成するには、次の手順を実行します。

  1. [アプリケーション] > [仮想サービス] の順に移動します。

  2. [仮想サービスの作成] ドロップダウン メニューで [詳細設定] を選択します。

  3. [新しい仮想サービス] 画面で、[VS VIP] ドロップダウン メニューから [VS VIP の作成] をクリックします。

  4. [VS VIP の作成] 画面で、[VIP] フィールドの下にある [追加] をクリックします。

  5. 次に示すように、IPv4 アドレス と IPv6 アドレスの値を指定します。



  6. [保存] をクリックします。

トラブルシューティング:トラフィック キャプチャ

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