VRD ユースケース — Citrix ADC 動的ルーティングと Kubernetes の使用

Acme Inc. Kubernetes アプリケーション向けのルートヘルスインジェクションと BGP 統合

Acme Inc. は、Citrix ADCの大規模なフットプリントを持つ長年のCitrix顧客です。Citrix ADCは、重要なKubernetesアプリケーションの主要な負荷分散およびビジネス継続性ソリューションとして機能します。Acme Inc. には現在、3つの主要なデータセンターがあります。

Acme Inc. は、重要な Kubernetes アプリケーションに冗長性と高可用性を提供し、3 つのデータセンターのすべてのデプロイラックで優れたフォールトトレランスを提供したいと考えています。

このソリューションは、Citrix ADCでルートヘルスインジェクションを使用して、既存のBGP+ECMPルーティングファブリックを介してアクセスされるKubernetesサービスに冗長性を提供します。

ルートのヘルスインジェクションに加えて、多くの Kubernetes アプリケーションでは、バックエンドサーバーが実際のクライアント IP を受信する必要があります。Citrix ADCを使用した従来の負荷分散では、ADCサブネットIPアドレスからバックエンドサーバー宛のパケットが送信されます。ソースアドレスとして真のクライアントIPアドレスを必要とするアプリケーションの場合、Citrix ADCは複数の方法を提供します。これらの方法には、USIP(ソースIPモードを使用)とDSR(Direct Server Return)が含まれます。

Acme Inc. ITは、KubernetesアプリケーションのテストVIPを使用して、テストCitrix ADC VPXインスタンスをプロビジョニングします。このテスト環境は、クライアント IP を使用してルートヘルスインジェクションソリューションを構築し、本番環境に展開する前に完全にテストするために使用されます。

導入要件

Acme Inc. とCitrix は、いくつかの異なる要件を特定しました。

  • 動的ルーティングネットワークへの接続を備えた、各データセンターのCitrix ADC VPXユニット (3)
  • Acme Inc. 動的ルーティングで /32 ルートとして設定する最大 3 台の仮想サーバーの IP アドレス

環境:

Kubernetes テスト VIP

  • 各Citrix ADCユニットのルートヘルスインジェクションVIPのネクストホップとして使用される各データセンターのSNIPアドレスには、動的ルーティングが有効になっている独自のSNIPアドレスが必要です。これは、アドバタイズされたルートヘルスインジェクション VIP のゲートウェイです。

以下を含む Kubernetes 情報を特定します。

  • バックエンド Kubernetes ポッドとテスト VIP
  • 必要なポートと負荷分散パラメーター
  • SSL 証明書 (該当する場合)

クライアント IP 設定

  • バックエンドサーバーは真のクライアントIPアドレスを受け取る必要がある
  • 使用可能な複数のオプションについては、クライアントIPオプションのセクションで説明しています。

ルートヘルスインジェクション (RHI)

Citrix ADC 動的ルーティングとルートヘルスインジェクション

Citrix ADC 動的ルーティングとルートヘルスインジェクションの主な目的は、VIPの状態または正常性を上流のルーターに伝えることです。VIP の状態は、VIP に関連付けられている仮想サーバーと、その VIP にバインドされているサービスによって異なります。ルートヘルスインジェクションによる VIP のアドバタイズメントは、仮想 IP アドレスに関連付けられた仮想サーバの状態に関連付けられます。

仮想 IP アドレスはアドバタイズメントを有効にする必要があります。このためには、仮想 IP アドレス で-hostrouteオプションをenabledに設定します。デフォルトでは、-hostrouteオプションはdisabledに設定されています。-hostrouteオプションは、add ns ipコマンドで IP アドレスを追加するとき、 またはset ns ipコマンドで既存の IP アドレスを変更することによって有効にできます。

ルートヘルスインジェクション監視

hostRoute このオプションを有効にすると、NetScaler カーネルは、仮想IPアドレスに関連付けられた仮想サーバーの状態に基づいて、ホストルートをZebOS NSM(ネットワークサービスモジュール)に挿入します。 - vserverroute health injectionLevel スイッチは、仮想サーバの状態と Network Services Module(NSM; ネットワークサービスモジュール)に送信される仮想 IP ホストルートとの関係を制御します。

仮想サーバールートヘルスインジェクションレベルで使用できる 3 つのオプション

  • ALL_VSERVERS — ホストルートは、仮想 IP に関連付けられているすべての仮想サーバが UP の場合にのみ NSM に挿入されます。
  • ONE_VSERVER — ホストルートは、仮想 IP に関連付けられている仮想サーバのいずれかが稼働している場合にのみ、NSM に挿入されます。
  • NONE — ホストルートは、仮想 IP に関連付けられている仮想サーバの状態に関係なく、NSM に挿入されます。

注:

デフォルトでは、—vserverrhIlevel は ONE_VSERVER に設定されています。

次の図は、Citrix ADC上の負荷分散仮想サーバーに関連付けられた仮想IPアドレスの基本的なルートヘルスインジェクション機能を示しています。

Citrix ADC 上の負荷分散仮想サーバーに関連付けられた仮想 IP アドレスの RHI 機能

複数のデータセンターを持つルートヘルスインジェクションオプション

以下では、各アプリケーションの特定の要件に応じて、アプリケーションごとに選択されるルートヘルスインジェクション設定について説明します。以下の種類から選択できます。

アクティブ — 各クライアント (エニーキャストまたは ECMP) の最も効率的なルートを決定する BGP でアクティブ

ルートヘルスインジェクションがアクティブ — アクティブ:エニーキャストまたは ECMP

ルートヘルスインジェクションのアクティブ/アクティブは、エニーキャストまたは ECMP です。これは真のアクティブ/アクティブ代替手段です。このシナリオでは、ルートヘルスインジェクション VIP の /32 ルートは、コストやローカルプリファレンスが BGP に提示されることなく、すべてのデータセンターでアドバタイズされます。3つのルートがネットワークに提示され、各データセンターに固有のCitrix ADCのSNIPアドレスが各VIPにアクセスするためのゲートウェイとして機能します。Acme Inc. の動的ルーティング環境は、トラフィックを分散するために、クライアント要求を等価コストベースでデータセンターに送信します。3 つのデータセンターのいずれかでサービスに障害が発生した場合、負荷分散されたサービスにバインドされたモニターが仮想サーバーを停止します。これにより、障害が発生したデータセンターのルートアドバタイズメントが削除されます。すべてのクライアント接続は、残りのデータセンターで引き続き機能します。

ルートヘルスインジェクションのアクティブ/アクティブ設定に関する重要な考慮事項

  1. ECMP によるルートヘルスインジェクションは、TCP および UDP ベースのサービスに推奨され、Acme Inc. ネットワークチームによる BGP 設定が必要です。ECMP によるルートヘルスインジェクションには、アップストリームルーターがサポートできるルートの数に制限があります (64)。
  2. エニーキャストによるルートヘルスインジェクションは UDP ベースのサービスをサポートしており、TCP ベースのサービスには推奨されません。

次の図は、アクティブ — アクティブエニーキャスト/ECMP のシナリオを示しています。

アクティブ-アクティブエニーキャスト ECMP シナリオ

Citrix ADC とクライアント IP オプション

Acme Inc. が大量のKubernetesアプリケーションに対して要求する重要な要件の1つは、バックエンドサーバーがCitrix ADCによって負荷分散されているサービスの真のクライアントIPアドレスを受け取ることです。Citrix ADCの一般的な負荷分散は、NetScalerが所有するSNIP(サブネットIP)アドレスからバックエンドサーバー宛てのトラフィックをすべて送信します。一部のアプリケーションでは、実際のクライアント IP が必要です。ルートヘルスインジェクションを使用するほとんどのアプリケーションでは、真のクライアントIPをバックエンドサーバーに送信する必要もあります。

Citrix ADCには「ソースIPの使用」(USIP)と呼ばれる機能があり、グローバルにバインドすることも、バックエンドサーバーへのクライアントIPを必要とする各サービスに個別にバインドすることもできます。この問題は、クライアントが別の送信元 IP のパケットを受信すると、非対称ルーティングが発生し、パケットがドロップされることです。このため、他の考慮事項を評価する必要があり、USIPが正しく機能するためにはバックエンドサーバーに追加の設定が必要です。

Citrix ADCでソースIPモードの使用を実装する際の重要な考慮事項は、Citrix ADCモード内でサージ保護モードをオフにする必要があることです。サージ保護機能を備えたUSIPモードの詳細については、 こちらのCitrixの記事を参照してください。

Citrix ADCには、これを実現するための複数の方法があり、それらについて次のセクションで説明します。使用可能なオプションは次のとおりです。

  • Citrix ADC SNIPをデフォルトゲートウェイとするUSIPモード
  • ダイレクト・サーバー・リターン・レイヤー3
    • IP トンネリング
    • TOS ヘッダーへのクライアント IP 挿入
  • ダイレクト・サーバー・リターン・レイヤー2
  • TCP ヘッダーのクライアント IP 挿入

Citrix ADC SNIPをデフォルトゲートウェイとして使用するUSIPモード

Acme Inc. IT との複数回の会議で、この方法がクライアント IP を必要とするほとんどの負荷分散サービスに適していると判断されました。この方法では、負荷分散される各バックエンドサーバーのデフォルトゲートウェイを変更し、負荷分散VIPをホストするCitrix ADCユニットのSNIPアドレスに設定します。このオプションは、Citrix ADCが着信クライアント要求のみを管理するダイレクトサーバーリターンオプションとは対照的に、すべてのCitrix ADC機能をサポートします。また、このオプションはADCユニットで最も多くの帯域幅を必要とします。 この方法には、次の基本要件があります。

  • Citrix ADCは、負荷分散されるすべてのバックエンドサーバーと同じL2サブネットにSNIPアドレスを持つ必要があります。
  • SNIP アドレスは、すべてのバックエンドサーバーのデフォルトゲートウェイとして構成されます。異なる L2 サブネットのバックエンドサーバーには、複数の SNIP アドレスを使用できます。
  • バックエンドサーバーを指すサービスで USIP モードを有効にする必要があります。

注:

USIPはCitrix ADCユニットでもグローバルに有効にできますが、USIPはUSIPモードを有効にした後に作成されたサービスにのみ適用されます。

Citrix では、バックエンドサーバーにネットワークインターフェイスを追加し、クライアント以外のトラフィックには静的ルートを設定することを推奨しています。

  • 帯域幅を必要とするバックアップルーチンやその他のプロセスは、Citrix ADCユニットをトラバースする必要はありません。

ダイレクトサーバーリターン:レイヤー 3 オプション

Citrix ADCによる直接サーバーリターンは、負荷分散構成でバックエンドサーバー上のクライアントIPアドレスを取得するためのもう1つの構成オプションです。ダイレクトサーバリターンはレイヤ3モードで設定できるため、ADCからバックエンドサーバへのL2接続を必要とするUSIPとは対照的に、他のL3 VLAN上のバックエンドサーバを使用できます。応答トラフィックがCitrix ADCユニットを経由しないため、ダイレクトサーバーリターン構成は特定のCitrix ADC機能をサポートしません。このオプションでは、Citrix ADC ユニットのスループットが最も少なくて済みます。

ダイレクトサーバーリターンは、クライアントIPを抽出し、クライアントに直接応答するためにTCPヘッダーを書き換えることができる必要があるため、バックエンドサーバーに必要なより複雑な構成があります。Citrix は現在、レイヤー3 DSRを構成するために2つの異なる方法をサポートしています。

  • IPトンネリング付きDSRモード (IPオーバーIP)
  • DSR モードと TOS (タイプ・オブ・サービス TCP ヘッダー・フィールド) レイヤー 3

DSR には次の基本要件があります。

  • Citrix ADCは、サービス上でUSIPを使用して構成する必要があります。
  • バックエンドサーバーには、Citrix ADC VIPアドレスで構成されたループバックアドレスがあります。
  • バックエンドサーバーは、それぞれの方法専用に設定する必要があります。
    • IPトンネリング:バックエンドサーバーは、ADCからのパケットのカプセル化を解除し、クライアントへの直接応答のためにクライアントIPを抽出する必要があります。
    • TOS(Type of Service):バックエンドサーバーは、TCPパケットのTOSヘッダーを読み取り、この情報を使用してクライアントに直接応答できる必要があります。
    • どちらの方法でも、バックエンドサーバーでのカスタム構成とサードパーティアプリケーションの使用が必要になる場合があります。

レイヤー3 DSRでは、ファイアウォールとセキュリティデバイスの例外の構成が必要になる場合があります。

レイヤ 3 でのDirect Server Return 詳細については、次のページを参照してください。

TOS を使用する場合の DSR モードの設定 - DSR と TOS

  • DSR と IP トンネリング

タイプ「LoadBalancer」のサービスを公開する

LoadBalancer タイプのサービスは、AWS、GCP、Azure などのパブリッククラウド上の Kubernetes デプロイメントでネイティブにサポートされます。クラウド展開では、LoadBalancer タイプのサービスを作成すると、クラウドマネージドロードバランサーがサービスに割り当てられます。その後、ロードバランサーを使用してサービスが公開されます。

Kubernetesのオンプレミス、ベアメタル、またはパブリッククラウド展開では、クラスター外のCitrix ADCを使用して着信トラフィックの負荷を分散できます。Citrix ingress controller は、Citrix ADCのマルチテナンシーを可能にする柔軟なIPアドレス管理を提供します。Citrix ingress controller を使用すると、1つのADCを使用して複数のサービスの負荷分散が可能になり、さまざまなIngress機能を組み合わせることもできます。Citrix ADCとCitrix ingress controller を使用すると、パブリッククラウドのロードバランサーリソースを最大限に活用し、運用コストを大幅に削減できます。

Citrix ADCがKubernetesクラスター(Tier-1)の外部にある場合、Citrix イングレスコントローラーはロードバランサータイプのサービスをサポートします。LoadBalancerタイプのサービスが作成、更新、または削除されると、Citrix ingress controller は負荷分散仮想サーバーを使用してCitrix ADCを構成します。

負荷分散仮想サーバーは、次のいずれかの方法で取得される IP アドレス (仮想 IP アドレスまたは VIP) を使用して構成されます。 ​

  1. Citrix が提供するIPAMコントローラーを使用して、サービスに仮想IPアドレスを自動的に割り当てます。このソリューションは、Infoblox などの ExternalDNS プロバイダーとソリューションを簡単に統合できるように設計されています。詳細については、「ExternalDNS との相互運用性」を参照してください。 ​
  2. サービス定義の spec.LoadBalancerIP フィールドを使用して IP アドレスを指定します。Citrix ingress controller は、サービスに対応する負荷分散仮想サーバーのIPアドレスとして、spec.loadBalancerIPフィールドで指定されたIPアドレスを使用します。

    apiVersion: v1
    kind: Service
    metadata:
        name: hello-world-service
    spec:
        type: LoadBalancer
        loadBalancerIP: ""
    ports:
    - port: 80
        targetPort: 8080
    selector:
        run: load-balancer-example
    <!--NeedCopy-->
    

詳細については、「 LoadBalancer タイプのサービスを公開する」を参照してください。

IPAM の前提条件

Kubernetesを使用したCitrix ADC動的ルーティングの前提条件として、IPアドレス管理(IPAM)を構成する必要があります。IPAMは、ADMが管理する展開でIPアドレスを自動的に割り当てて解放するために使用されます。詳細については、「 IP アドレス管理の構成」を参照してください。

VRD ユースケース — Citrix ADC 動的ルーティングと Kubernetes の使用