NSX Advanced Load Balancer は、Unified Access Gateway (UAG)、Connection Server、App Volumes Manager などの前面に必要に応じて展開できます。以下で説明するのは、VMware Horizon 環境で UAG サーバへのトラフィックをロード バランシングするための推奨される NSX Advanced Load Balancer の構成方法です。

UAG サーバのロード バランシングのための新しい展開方法では、NSX Advanced Load Balancer は UAG サーバではなく 307 リダイレクトを XML 解析とポート変換とともに実行します。このアプローチの利点は次のとおりです。

  • パーシステンスの問題を処理するのに十分な堅牢性がある

  • ユーザーが NAT の背後にいる環境で適切に機能する

  • 構成が簡単

  • 可視性が高く、ログ機能が優れている



注:

このサンプル トポロジは、DMZ ネットワークでの UAG の展開を示しています。ただし、NSX Advanced Load Balancer は DMZ ネットワークと非 DMZ ネットワークの両方での展開をサポートします。

注:

現在、この機能は技術プレビュー版です。

要求フロー



  1. クライアントは、L7 TLS ポート 443 で Horizon FQDN への要求を開始します。

  2. NSX Advanced Load Balancer は、ロード バランサのアルゴリズムを使用して、プールのサーバ リストから UAG サーバを選択します。次に、場所が UAG VIP FQDN に設定され、選択した UAG サーバ用にカスタムの L7 ポートを使用する、307 リダイレクトで応答します。

注:

Horizon 内部ポートとして、5001 ~ 5005 の範囲のサービス ポートが追加されています。これらのポートはカスタム ポートと呼ばれます。以降のすべての要求は、このホスト名と L7 ポートのクライアントから送信され、マッピングされた UAG サーバに送信されます。次にその一例を示します。



5001 ~ 5005 のポートは、仮想サービスで指定されます。

UAG 1 と UAG 2 という 2 台のバックエンド UAG サーバがあるとします。最初の要求が、ポート 443 のレイヤー 7 仮想サービスに送信されると、NSX Advanced Load Balancer は、構成済みのロード バランシング アルゴリズムに基づいて、これらのサーバのいずれか(UAG 1 または UAG 2)を選択します。NSX Advanced Load Balancer は、プールから UAG 1 サーバを選択すると、VIP FQDN(場所ヘッダー)および 5001 ポート(UAG 1 サーバ用)を設定した 307 リダイレクトで応答します。

同様に、UAG 2 サーバの場合、ポート 5002 が NSX Advanced Load Balancer によって設定されます。UAG サーバへのカスタム ポート マッピングを取得するには、次のように show pool <pool-name> vs service server map kv を使用します。

admin:10-50-55-87]: > show pool UAG-MVP-pool vs service server map kv 
          
 +-------------------+---------------------------------------------------------+ 
    
 | Field             | Value                                                   | 
    
 +-------------------+---------------------------------------------------------+ 
    
 | uuid              | se-00505695c1f1                                         | 
    
 | keyval_entries[1] |                                                         | 
    
 |   key             | 10.98.17.153,47873,2                                    | 
    
 |   val             | fe_l7_port:5003,fe_blast_port:20003,fe_pcoip_port:30007 | 
    
 |   local_eol       | 1000                                                    | 
    
 |   version         | 0                                                       | 
    
 |   ishub           | False                                                   | 
    
 | keyval_entries[2] |                                                         | 
    
 |   key             | 10.130.172.191,47873,2                                  | 
    
 |   val             | fe_l7_port:5002,fe_blast_port:20002,fe_pcoip_port:30006 | 
    
 |   local_eol       | 1000                                                    | 
    
 |   version         | 0                                                       | 
    
 |   ishub           | False                                                   | 
    
 | keyval_entries[3] |                                                         | 
    
 |   key             | 10.130.172.192,47873,2                                  | 
    
 |   val             | fe_l7_port:5001,fe_blast_port:20001,fe_pcoip_port:30005 | 
    
 |   local_eol       | 1000                                                    | 
    
 |   version         | 0                                                       | 
    
 |   ishub           | False                                                   | 
    
 +-------------------+---------------------------------------------------------+ 
 

show pool <pool-name> vs service server map テーブルを使用します。

 [admin:10-50-55-87]: > show pool UAG-MVP-pool vs service server map table 
    
 +--------------------------------+--------------------+ 
    
 | Field                          | Value              | 
    
 +--------------------------------+--------------------+ 
    
 | uuid                           | se-00505695c1f1    | 
    
 | vs_service_server_map_entry[1] |                    | 
    
 |   app_service_port             | 5001               | 
    
 |   app_service_type             | HORIZON_INTERNAL   | 
    
 |   ip_port_str                  | 10.130.172.192:443 | 
    
 | vs_service_server_map_entry[2] |                    | 
    
 |   app_service_port             | 5002               | 
    
 |   app_service_type             | HORIZON_INTERNAL   | 
    
 |   ip_port_str                  | 10.130.172.191:443 | 
    
 | vs_service_server_map_entry[3] |                    | 
    
 |   app_service_port             | 5003               | 
    
 |   app_service_type             | HORIZON_INTERNAL   | 
    
 |   ip_port_str                  | 10.98.17.153:443   | 
    
 | vs_service_server_map_entry[4] |                    | 
    
 |   app_service_port             | 20001              | 
    
 |   app_service_type             | HORIZON_BLAST      | 
    
 |   ip_port_str                  | 10.130.172.192:443 | 
    
 | vs_service_server_map_entry[5] |                    | 
    
 |   app_service_port             | 20002              | 
    
 |   app_service_type             | HORIZON_BLAST      | 
    
 |   ip_port_str                  | 10.130.172.191:443 | 
    
 | vs_service_server_map_entry[6] |                    | 
    
 |   app_service_port             | 20003              | 
    
 |   app_service_type             | HORIZON_BLAST      | 
    
 |   ip_port_str                  | 10.98.17.153:443   | 
    
 | vs_service_server_map_entry[7] |                    | 
    
 |   app_service_port             | 30005              | 
    
 |   app_service_type             | HORIZON_PCOIP      | 
    
 |   ip_port_str                  | 10.130.172.192:443 | 
    
 | vs_service_server_map_entry[8] |                    | 
    
 |   app_service_port             | 30006              | 
    
 |   app_service_type             | HORIZON_PCOIP      | 
    
 |   ip_port_str                  | 10.130.172.191:443 | 
    
 | vs_service_server_map_entry[9] |                    | 
    
 |   app_service_port             | 30007              | 
    
 |   app_service_type             | HORIZON_PCOIP      | 
    
 |   ip_port_str                  | 10.98.17.153:443   | 
    
 +--------------------------------+--------------------+
 
  1. さらに別の UAG サーバがある場合は、NSX Advanced Load Balancer 仮想サービスに 5003、5004 などのポートを追加します。

    要約すると、L7 VIP には、プール内の各 UAG サーバ専用に使用するための十分な数のサービス ポートが必要です。今後の UAG サーバ プールの拡張に対応できるようにするため、最初に十分な数のポートを開いておくことをお勧めします。

    307 リダイレクトを実行する NSX Advanced Load Balancer の上記の機能により、Horizon Server の構成変更を最小限に抑えながら、新しい UAG サーバをサーバ プールに追加できます。特定の L7 サービス ポート(基本ポート以外)への受信クライアント要求は、プール内の特定の UAG サーバにコンテンツ スイッチングされます。

  2. クライアントは、リダイレクトされた FQDN https://demo.horizon.com:5001/ で要求を送信します。

  3. NSX Advanced Load Balancer は、いずれかの UAG サーバに要求を送信します。この例では、UAG 1 に送信されます。

  4. UAG は、XML データを使用して NSX Advanced Load Balancer に応答します。クライアントが、選択した UAG サーバの認証を完了すると、IP/FQDN を含む UAG 応答がセカンダリ プロトコル通信に使用されます。

  5. NSX Advanced Load Balancer はこの応答を解析し、IP/FQDN およびポート XML タグを NSX Advanced Load Balancer の FQDN と L4 サービス ポートに置き換えます。たとえば、この例の UAG 1 の場合、UAG の IP/FQDN とポート XML タグは、NSX Advanced Load Balancer の VIP FQDN および 20001/30005 ポート(Blast と PCoIP 用)に置き換えられます。同様に、UAG 2 の場合、NSX Advanced Load Balancer は FQDN とポートを NSX Advanced Load Balancer の VIP FQDN および 20002/30006 ポート(Blast か PCoIP によって異なる)に変更します。

  6. カスタム ポートを使用する L4 要求は、NSX Advanced Load Balancer 仮想サービスの FQDN に送信されます。

  7. カスタム ポートを使用することで、NSX Advanced Load Balancer は、どの UAG サーバに要求を送信する必要があるかを把握します。

  8. NSX Advanced Load Balancer は、適切な UAG サーバに要求を送信します。この例では、UAG 1 に送信されます。

  9. UAG は NSX Advanced Load Balancer に応答します。

  10. NSX Advanced Load Balancer はクライアントに応答を送信します。これで、クライアントは、アプリケーションやデスクトップを正常にレンダリングできます。

ロード バランシングの構成

UAG のロード バランシングを構成する手順は次のとおりです。

  1. UAG サーバのロード バランシングのための NSX Advanced Load Balancer

  2. プールの作成

  3. L7 VIP に必要な SSL 証明書のインストール

  4. UAG 用の仮想サービスの作成

UAG 用のカスタム健全性モニターの作成

  1. カスタム健全性モニターを作成するには、[テンプレート] > [プロファイル] > [健全性モニター] の順に移動します。

  2. [作成] をクリックします。

  3. Horizon 用に作成された VMware Cloud を選択します。

  4. [新しい健全性モニター] 画面で、次の詳細を入力します。

    フィールド

    送信間隔

    30

    受信タイムアウト

    10

    クライアント要求データ

    GET /favicon.ico HTTP/1.0

    応答コード

    2xx

[新しい健全性モニター] 画面は、次のように表示されます。







構成を [保存] します。

プールの作成

プールを作成するには、次の手順を実行します。

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

  2. [[クラウドの選択]] ウィンドウからクラウドを選択します。

  3. [次へ] をクリックします。

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

  5. [プールの作成] 画面で、次のように詳細を更新します。





  6. [SSL] タブで、次のように適切な SSL プロファイルを選択します。



  7. [サーバ] タブで、以前に作成した UAG サーバのサーバ IP アドレスを追加します。



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

L7 VIP に必要な SSL 証明書のインストール

SSL 接続が仮想サービスで終了している場合は、SSL 証明書を仮想サービスに割り当てる必要があります。自己署名証明書を使用するのではなく、有効な認証局によって署名された証明書をインストールすることをお勧めします。NSX Advanced Load Balancer に証明書をインストールし、CA 証明書がインポートおよびリンクされていることを確認します。詳細については、『VMware NSX Advanced Load Balancer 構成ガイド』の「SSL 証明書」トピックを参照してください。

注:

この設定では、Horizon_Certificate という名前の証明書がインストールされています。

SAN 証明書を UAG に追加します。SAN 証明書の追加の詳細については、「Configuring TLS/SSL Certificates for Unified Access Gateway Appliances」を参照してください。

UAG 用の仮想サービスの作成

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

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

  2. [仮想サービスの作成] > [詳細設定] の順にクリックします。

  3. 仮想サービス VIP をバインドします。

  4. アプリケーション プロファイルとして System-HTTP-Horizon-UAG を使用します。

  5. 次に示すように、仮想サービスを構成します。



  6. [サービス ポート] セクションで、[詳細に切り替え] をクリックしサービス ポートを構成します。





    注:

    UAG プールに追加する新しい UAG サーバに対応できるだけの十分な数のポートが仮想サービスで開かれていることを確認します。

    この例では、プライマリ トラフィックとセカンダリ トラフィック用に 6 つのポートが開かれています。

    • ポート 443 - これは XML API トラフィック用です

    • ポート 5001 ~ 5005 - リダイレクトされたトラフィックを処理するために L7 プライマリ XML トラフィック用に開いた Horizon 内部ポート

    • ポート 30001 ~ 30005 – Blast

    • ポート 20001 ~ 20005 - PcoIP

    これらの非標準ポートは、NSX Advanced Load Balancer 仮想サービスでのみ必要です。UAG サーバに対してこれらのポートを開く必要はありません。これらのポートは、ロード バランサの前に配置されたファイアウォールで開く必要があります。

  7. プールと、作成された SSL 証明書をバインドします。

  8. [次へ] をクリックします。

  9. [次へ] をクリックして、構成を保存します。

NAT ユースケースでの PCoIP のパブリック IP の構成

UAG 仮想サービスを使用する Horizon 環境の場合、クライアントはデフォルトで PCoIP 接続に UAG 仮想サービス IP を使用します。この動作は、外部クライアントが、仮想サービスのプライベート IP アドレスに変換されるパブリック IP アドレスに接続する NAT 環境では望ましくありません。この動作を変更するには、仮想サービスのコンテンツ書き換えルールを構成して、PCoIP を外部クライアントが使用するパブリック IP に置き換えます。次の例では、パブリック IP 11.11.11.11 であると想定します。

[admin:1234]: > configure virtualservice HORIZON-MVP-UAG-VS
[admin:1234]: virtualservice> content_rewrite
[admin:1234]: virtualservice:content_rewrite> rsp_rewrite_rules index 1
[admin:1234]: virtualservice:content_rewrite:rsp_rewrite_rules> pairs index 1
[admin:1234]: virtualservice:content_rewrite:rsp_rewrite_rules:pairs> replacement_string val "${1}11.11.11.11${2}"
[admin:1234]: virtualservice:content_rewrite:rsp_rewrite_rules:pairs:replacement_string> save
[admin:1234]: virtualservice:content_rewrite:rsp_rewrite_rules:pairs> save
[admin:1234]: virtualservice:content_rewrite:rsp_rewrite_rules> save
[admin:1234]: virtualservice:content_rewrite> save
[admin:1234]: virtualservice> save

UAG サーバでの構成の変更

  1. プールの作成後、UAG サーバごとに Blast および PCoIP 用のカスタム ポートを取得します([プール] > [サーバ] ページ)。



  2. UAG の Blast および PCoIP のそれぞれの外部 URL にカスタム ポートを追加します

    1. Blast UDP が機能するには、Blast URL が https://uag.site.com:xxxx/?UDPPort=xxxx という形式であることが必要です。詳細については、「UAG」を参照してください。

    2. 各 UAG の Blast と PCoIP の外部 URL フィールドを、NSX Advanced Load Balancer ポート マップ(ユーザー インターフェイスの場合は [プールの編集]) > [新しいプール][サーバ] タブ、または [プールの編集] ページ)で追加されたカスタム ポートを使用するように変更します。Blast の外部 URL を、UDP のカスタム ポートを含めるように変更します。たとえば、https://uag-vs.site1.com:<BLAST-CUSTOM-PORT>/?UDPPort=<BLAST-CUSTOM-PORT> です。詳細については、「Blast TCP and UDP External URL Configuration Options」を参照してください。



  3. UAG で SAML 認証が構成されている場合は、IDP の SSO URL リストに、各サイトの UAG VS FQDN:port の組み合わせを追加します(ここでのポートは、プライマリ プロトコル用に構成されたカスタム ポートを指します。IDP がこの機能を提供する場合は、ワイルドカード ポートを使用してください)。たとえば、[uag-vs.site1.com:5001、uag-vs.site1.com:5002、uag-vs.site2.com:5001、uag-vs.site2.com:5002] などです。

  4. 無効な証明書エラーを回避するため、UAG 仮想サービス証明書の SAN リストに、各サイトの UAG 仮想サービスの FQDN を追加します。

  5. プライマリ/セカンダリ接続の UAG 仮想サービス VIP で使用されるカスタム ポートは、次の場合に UAG サーバ用に変更される可能性があります。

    1. UAG サーバが削除され、UAG 仮想サービス プールに追加し直された場合。

    2. すべての SE が一度に停止した場合。この時点でポート マップを持つ SE は 1 つもなく、ポート マップを再構築する必要があります。この場合、UAG 外部 URL の変更を、NSX Advanced Load Balancer ポート マップに表示されている新しいポートでやり直します。

  6. ポート範囲によって、追加できるサーバの数が決まります。たとえば、ポート範囲として 2000 ~ 2010 が追加されている場合、追加できるサーバは 10 台のみです。さらに必要な場合は、ポート範囲を変更します。

  7. UAG 外部 URL にカスタム ポートの変更を反映するには、変更後に Blast プロトコルと PCoIP プロトコルが無効になっていることを確認します。変更を保存して、プロトコルを再度有効にします。

UAG トラフィック用の WAF の有効化の詳細については、「VMware Horizon 用の NSX Advanced Load Balancer の構成」を参照してください。

既知の問題

  • UAG 外部 URL にカスタム ポートの変更を反映するには、変更後に Blast プロトコルと PCoIP プロトコルを無効にし、変更を保存して、プロトコルを再度有効にします。UAG ポート キャッシュの問題については、UAG 管理コンソールでプロトコルを切り替えます。

  • 一部のポートは、Chrome などのブラウザによってブロックされる可能性があります。たとえば、ポート 6000 は X11 によって使用されており、これがプライマリ/セカンダリ カスタム ポートに使用されている場合、Chrome は、制限付きポートが使用されているという理由で接続をブロックします。

  • 場合によっては、VMware Horizon Client にアクセスするときに、Horizon Client のサーバ リスト画面に次のようにサーバ アイコンが作成される場合があります。



  • カスタム ポートを使用してリダイレクトすると、HTML クライアントのログアウトが停止します。

  • 仮想サービスに、System-HTTP-Horizon-UAG、または [アプリケーション サービス タイプ] が Horizon に設定されているアプリケーション プロファイルが構成されている場合、それぞれの仮想サービスには、Horizon のユースケース固有のコンテンツの書き換えルールが添付されます。

     [admin:10-50-55-170]: > show virtualservice <UAG-L7-VS-Name>
     +------------------------------------+---------------------------------------------------------------------------+
     | Field                              | Value                                                                     |
     +------------------------------------+---------------------------------------------------------------------------+
     | uuid                               | virtualservice-23db86e6-d508-4120-aae4-f8da518a5dbe                       |
     | name                               | HORIZON-MVP-UAG-VS                                                        |
     | enabled                            | True                                                                      |
     |---------------------------Truncated Output---------------------------------------------------------------------|
     | content_rewrite                    |                                                                           |
     |   rewritable_content_ref           | System-Rewritable-Content-Types                                           |
     |   rsp_rewrite_rules[1]             |                                                                           |
     |     name                           | System-Standard-Horizon                                                   |
     |     enable                         | True                                                                      |
     |     index                          | 1                                                                         |
     |     pairs[1]                       |                                                                           |
     |       search_string                |                                                                           |
     |         type                       | SEARCH_REGEX                                                              |
     |         val                        | (<address>)[\s]*(?:[0-9]{1,3}\.){3}[0-9]{1,3}[\s]*(<address>) |
     |       replacement_string           |                                                                           |
     |         type                       | COMBINATION_STRING                                                        |
     |         val                        | ${1}${vs_ip}${2}                                                          |
     |---------------------------Truncated Output---------------------------------------------------------------------|  
     | allow_invalid_client_cert          | False                                                                     |
     | vh_type                            | VS_TYPE_VH_SNI                                                            |
     +------------------------------------+---------------------------------------------------------------------------+
     
    • これらのルールは、アプリケーション プロファイルが Horizon 以外のサービス タイプに変更された場合でも、仮想サービスに残ります。この場合に、コンテンツの書き換えルールを削除するには、コントローラ CLI で次のコマンドを実行します(アプリケーション プロファイルからアプリケーション サービス タイプを削除した後)。

     [admin:1234]: > configure virtualservice <UAG-L7-VS-Name>
     [admin:1234]: > no content_rewrite
     [admin:1234]: > save

    [アプリケーション サービス タイプ] は、次に示すように、アプリケーション プロファイルの [詳細] 設定に表示されます。