VRDユースケース — KubernetesでのCitrix ADC 動的ルーティングの使用
Acme Inc. Kubernetes アプリケーション向けルートヘルスインジェクションと BGP 統合
Acme Inc. は、Citrix ADCの大規模なフットプリントを持つ長年のシトリックス顧客です。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(直接サーバーリターン)が含まれます。
Acme Inc. ITは、KubernetesアプリケーションのテストVIPとテストCitrix ADC VPX インスタンスをプロビジョニングします。このテスト環境は、クライアント IP を使用してルートヘルスインジェクションソリューションを構築し、運用環境にロールアウトする前に完全にテストするために使用されます。
展開の要件
Acme Inc. とCitrix は、いくつかの異なる要件を特定しました。
- 各データセンター内のCitrix ADC VPX ユニット(動的ルーティングネットワーク接続)(3)
- Acme Inc. の動的ルーティングで /32 ルートとして構成される、最大 3 つの仮想サーバーの IP アドレス
環境:
クベルネテステストVIP
- 各Citrix ADC ユニットのルートヘルスインジェクションVIPのネクストホップとして使用される各データセンターのSNIPアドレスには、動的ルーティングが有効になっている独自のSNIPアドレスが必要です。これは、アドバタイズされたルートヘルスインジェクション VIP のGateway です。
以下を含むKubernetesの情報を特定します。
- バックエンド Kubernetes ポッドとテスト VIP
- 必要なポートとロードバランシングパラメーター
- SSL 証明書(該当する場合)
クライアントIP構成
- バックエンドサーバーは、真のクライアントIPアドレスを受信する必要がある
- 使用可能な複数のオプションについては、「クライアントIPオプション」セクションで説明します。
ルートヘルスインジェクション(RHI)
Citrix ADC 動的ルーティング(ルートヘルスインジェクションあり)
Citrix ADC での動的ルーティングとルート正常性注入の主な目的は、VIPの状態または正常性をアップストリームルーターに伝達することです。VIP の状態は、それに関連付けられた仮想サーバーと、その VIP にバインドされているサービスによって異なります。ルートヘルスインジェクションによる VIP のアドバタイズメントは、仮想 IP アドレスに関連付けられた仮想サーバの状態に関連付けられます。
仮想 IP アドレスでアドバタイズメントが有効になっている必要があります。このためには、仮想 IP アドレス で-hostroute
オプションをenabled
に設定します。デフォルトでは、 -hostroute
オプションはdisabled
に設定されています。-hostroute
このオプションは、コマンドで IP アドレスを追加するとき、または add ns ip
コマンドを使用して既存の IP アドレスを変更するときに有効にできます。 set ns ip
ルートヘルスインジェクションのモニタリング
hostRoute
このオプションを有効にすると、NetScaler カーネルは、仮想IPアドレスに関連付けられた仮想サーバーの状態に基づいて、ホストルートをZebOS NSM(ネットワークサービスモジュール)に挿入します。- vserverroute health injectionLevel
スイッチは、仮想サーバの状態と Network Services Module(NSM; ネットワークサービスモジュール)に送信される仮想 IP ホストルートの関係を制御します。
仮想サーバールートヘルスインジェクションレベルで使用できる次の 3 つのオプション。
-
ALL_VSERVERS
— ホストルートは、仮想 IP に関連付けられたすべての仮想サーバーが UP の場合のみ、NSM に注入されます。 -
ONE_VSERVER
— ホストルートは、仮想 IP に関連付けられた仮想サーバのいずれかが UP の場合のみ、NSM に注入されます。 -
NONE
— ホストルートは、仮想 IP に関連付けられた仮想サーバの状態に関係なく、NSM に注入されます。
注:
デフォルトでは、—vServerRHilevelはONE_VSERVERに設定されています。
次の図は、Citrix ADC 上の負荷分散仮想サーバーに関連付けられた仮想IPアドレスの基本的なルートヘルス注入機能を示しています。
複数のデータセンターでのルートヘルスインジェクションオプション
次に、各アプリケーションの特定の要件に応じて、アプリケーションごとに選択されるルートヘルスインジェクション設定について説明します。以下の種類から選択できます。
Active:各クライアント(エニーキャストまたは ECMP)に対して最も効率的なルートを決定する BGP によるアクティブ
ルートヘルスインジェクションアクティブ — アクティブ:エニーキャストまたは ECMP
ルートヘルスインジェクションがアクティブ/アクティブはエニーキャストまたは ECMP です。これは真のアクティブ-アクティブ代替手段です。このシナリオでは、ルートヘルスインジェクション VIP の /32 ルートがすべてのデータセンターでアドバタイズされ、コストやローカルプリファレンスが BGP に提示されることはありません。3つのルートが、各VIPにアクセスするためのGateway として機能する各データセンターに固有のCitrix ADCのSNIPアドレスを持つネットワークに提供されます。Acme Inc. の動的ルーティング環境では、トラフィック分散のために均等なコストでクライアント要求をデータセンターに送信します。3 つのデータセンターのいずれかでサービスに障害が発生した場合、負荷分散されたサービスにバインドされたモニターによって仮想サーバーが停止します。これにより、障害が発生したデータセンターのルートアドバタイズメントが削除されます。すべてのクライアント接続は、残りのデータセンターで引き続き動作します。
ルートヘルスインジェクションのアクティブ/アクティブ設定に関する重要な考慮事項:
- ECMP を使用したルートヘルスインジェクションは、TCP および UDP ベースのサービスに対して推奨され、Acme Inc. ネットワークチームによる BGP 設定が必要です。ECMP を使用したルートヘルスインジェクションでは、アップストリームルータがサポートできるルートの数(64)に制限があります。
- エニーキャストを使用したルートヘルスインジェクションは UDP ベースのサービスで動作しますが、TCP ベースのサービスにはお勧めしません。
次の図は、アクティブな ANYCast/ECMP シナリオを示しています。
Citrix ADC とクライアントIPのオプション
大量のKubernetesアプリケーションに対してAcme Inc. が要求する重要な要件の1つは、バックエンドサーバーがCitrix ADC によって負荷分散されるサービスの真のクライアントIPアドレスを受信することです。Citrix ADC の一般的な負荷分散は、NetScaler が所有するSNIP(サブネットIP)アドレスからバックエンドサーバー宛てのすべてのトラフィックを処理します。一部のアプリケーションでは、実際のクライアント IP が必要です。ルートヘルスインジェクションを利用するアプリケーションのほとんどは、真のクライアント IP をバックエンドサーバーに送信する必要があります。
Citrix ADC には「Use Source IP」(USIP)と呼ばれる機能があり、グローバルにバインドすることも、バックエンドサーバーにクライアントIPを必要とする各サービスに個別にバインドすることもできます。この問題は、クライアントが異なる送信元 IP を持つパケットを受信すると、非対称ルーティングが発生し、パケットがドロップされることです。このため、その他の考慮事項を評価する必要があり、USIP を適切に動作させるには、バックエンドサーバーに追加の設定が必要になります。
Citrix ADCでソースIPモードの使用を実装する際の重要な考慮事項は、Citrix ADC モードでサージ保護モードをオフにする必要があることです。サージ保護を使用したUSIPモードの詳細については、Citrix の記事を参照してください ここ。
Citrix ADC では、これを実現するための複数の方法が用意されています。これらの方法については、次のセクションで説明します。使用可能なオプションは次のとおりです。
- Citrix ADC SNIPをデフォルトGateway として使用したUSIPモード
- ダイレクトサーバリターンレイヤ 3
- IP トンネリング
- TOS ヘッダーへのクライアント IP 挿入
- ダイレクトサーバリターンレイヤ 2
- TCP ヘッダーのクライアント IP 挿入
デフォルトのゲートウェイとしてCitrix ADC SNIPを使用するUSIPモード
Acme Inc. IT との複数の会議で、クライアントの IP を必要とする負荷分散サービスのほとんどでこの方式が好ましいと判断されました。この方法では、負荷分散される各バックエンドサーバーのデフォルトGateway を変更し、負荷分散されたVIPをホストするCitrix ADC ユニットのSNIPアドレスに設定します。このオプションは、Citrix ADC が受信クライアント要求のみを管理する、ダイレクトサーバーのリターンオプションとは対照的に、すべてのCitrix ADC機能をサポートします。また、このオプションでは、ADCユニットの帯域幅が最も多く必要になります。 この方法には、次の基本的な要件があります。
- Citrix ADC は、負荷分散されるすべてのバックエンドサーバーと同じL2サブネットにSNIPアドレスを設定する必要があります。
- SNIP アドレスは、すべてのバックエンドサーバーのデフォルトGateway として構成されます。異なる L2 サブネットのバックエンドサーバーには、複数の SNIP アドレスを使用できます。
- バックエンドサーバーを指すサービスで USIP モードを有効にする必要があります。
注:
USIPはCitrix ADC ユニットでもグローバルに有効化できますが、USIPはUSIPモードを有効にした後に作成されたサービスにのみ適用されます。
バックエンドサーバーにネットワークインターフェイスを追加し、非クライアントトラフィックの静的ルートを構成することをお勧めします。
- 帯域幅を必要とするバックアップルーチンやその他のプロセスは、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)
- TOS(タイプオブサービス TCP ヘッダーフィールド)を備えた DSR モードレイヤ 3
DSRには、次の基本的な要件があります。
- Citrix ADC は、サービス上でUSIPで構成する必要があります。
- バックエンドサーバーには、Citrix ADC VIPアドレスで構成されたループバックアドレスがあります。
- バックエンドサーバーは、各方式に固有に設定する必要があります。
- IP トンネリング:バックエンドサーバーは、ADC からのパケットをカプセル化解除し、クライアントへの直接応答のためにクライアント IP を抽出する必要があります。
- TOS(Type of Service):バックエンドサーバーが TCP パケットの TOS ヘッダーを読み取り、この情報を使用してクライアントに直接応答できる必要があります。
- どちらの方法でも、バックエンドサーバーでのカスタム設定と、サードパーティ製アプリケーションの使用が必要になる場合があります。
レイヤ 3 DSR では、ファイアウォールとセキュリティデバイスの例外の設定が必要になる場合があります。
レイヤ 3 での直接サーバーリターンの詳細については、こちらを参照してください。
- TOS 付きの DSR
- IP トンネリングを使用した DSR
タイプ「ロードバランサー」のサービスを公開する
タイプ LoadBalancer のサービスは、AWS、GCP、Azure などのパブリッククラウド上の Kubernetes デプロイでネイティブにサポートされています。クラウドデプロイメントでは、LoadBalancer タイプのサービスを作成すると、クラウドで管理されるロードバランサーがそのサービスに割り当てられます。その後、ロードバランサーを使用してサービスが公開されます。
Kubernetes のオンプレミス、ベアメタル、またはパブリッククラウドの展開では、クラスター外の Citrix ADC を使用して、着信トラフィックの負荷分散を行うことができます。Citrix入力Controller は、Citrix ADCのマルチテナンシーを可能にする柔軟なIPアドレス管理を提供します。Citrix Ingress Controllerを使用すると、単一のADCを使用して複数のサービスを負荷分散し、さまざまなIngress機能を組み合わせることができます。Citrix ADC をCitrix Ingress Controllerとともに使用すると、パブリッククラウドのロードバランサーリソースを最大限に活用し、運用コストを大幅に削減できます。
Citrix ADC が Kubernetes クラスター (Tier-1) の外側にある場合、Citrix 入力Controller は LoadBalancer タイプのサービスをサポートします。LoadBalancerタイプのサービスを作成、更新、または削除すると、Citrix 入力Controller がCitrix ADC に負荷分散仮想サーバーを構成します。
負荷分散仮想サーバーには、次のいずれかの方法で取得される IP アドレス(仮想 IP アドレスまたは VIP)が設定されます。
- Citrix が提供するIPAMController を使用して、サービスに仮想IPアドレスを自動的に割り当てます。このソリューションは、Infoblox などの ExternalDNS プロバイダとソリューションを簡単に統合できるように設計されています。詳しくは、「外部DNS との相互運用性」を参照してください。
-
サービス定義の Spec.LoadBalancerIP フィールドを使用して IP アドレスを指定します。Citrix 入力Controller は、Spec.LoadBalancerIPフィールドで指定されているIPアドレスを、サービスに対応する負荷分散仮想サーバーのIPアドレスとして使用します。
apiVersion: v1 kind: Service metadata: name: hello-world-service spec: type: LoadBalancer loadBalancerIP: "" ports: - port: 80 targetPort: 8080 selector: run: load-balancer-example
より詳細なリファレンスについては、ロードバランサー型のサービスを公開するを参照してください 。