Citrix ADC ingress controller

複数の Kubernetes クラスタに対するポリシーベースのルーティングサポート

単一のCitrix ADCを使用して複数のKubernetesクラスターの負荷を分散する場合、Citrix ingress controller は静的ルートを介してPod CIDRネットワークを追加します。これらのルートは、Kubernetes ポッドと Citrix ADC 間のネットワーク接続を確立します。ただし、Pod の CIDR がオーバーラップすると、ルート競合が発生する可能性があります。Citrix ADCは、このようなシナリオでのネットワークの競合に対処するために、ポリシーベースルーティング(PBR)をサポートしています。PBR では、指定した基準に基づいて決定が行われます。通常、ネクストホップは選択したパケットを送信する場所に指定されます。マルチクラスターKubernetes環境では、KubernetesクラスターまたはCitrix Ingress Controller ごとにサブネットIPアドレス(SNIP)を予約することでPBRが実装されます。ネットプロファイルを使用すると、SNIPは同じCitrix ingress controller によって作成されたすべてのサービスグループにバインドされます。同じクラスタに属するサービスグループから生成されたすべてのトラフィックについて、送信元 IP アドレスは同じ SNIP です。

以下は、Citrix ADC VPXまたはMPXを使用して負荷分散された2つのKubernetesクラスターに対してPBRが構成されているトポロジの例です。

PBR構成

Citrix ingress controller を使用して PBR を構成する

PBR を設定するには、Kubernetes クラスタごとに 1 つ以上の SNIP が必要です。SNIP値は、起動時にCitrix ingress controller デプロイメントYAMLファイルの環境変数を使用するか、ConfigMapを使用して指定できます。

ConfigMapを使用してCitrix ingress controller を展開し、PBR を構成するには、次の手順を実行します。

  1. 次のコマンドを使用して、citrix-k8s-ingress-controller.yamlをダウンロードします。

    wget  https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/baremetal/citrix-k8s-ingress-controller.yaml
    
  2. Citrix ingress controller の YAML ファイルを編集します。

      - Specify the values of the environment variables as per your requirements. For more information on specifying the environment variables, see the [Deploy Citrix ingress controller](/en-us/citrix-k8s-ingress-controller/cic-yaml.html) documentation.
    
  3. 各クラスターで次のコマンドを使用して、編集した YAML ファイルを使用して Citrix ingress controller をデプロイします。

    kubectl create -f citrix-k8s-ingress-controller.yaml
    
  4. ConfigMap で必要な SNIP 値を含む YAML ファイルcic-configmap.yamlを作成します。

    SNIP 値を持つ ConfigMap の例を次に示します。

    apiVersion: v1
    kind: ConfigMap
    metadata:
        name: pbr-test
        namespace: default
    data:
        NS_SNIPS: '["192.0.2.2", "192.0.2.1"]'
    
  5. ConfigMap を適用します。

     kubectl create -f cic-configmap.yaml
    

Citrix ingress controller デプロイメントの YAMLファイルのNS_SNIPS環境変数を使用して、SNIP を指定することもできます。

     - name: "NS_SNIPS"
        value: '["192.0.2.2", "192.0.2.1"]'

ConfigMap を使用して SNIP を構成する際の使用上のガイドラインを次に示します。

  • ConfigMap を介して追加または削除できるのは SNIP のみです。 feature-node-watch引数は、ブートアップ時のみ有効にできます。

  • ConfigMap を追加すると、次のようになります。

    • 起動時に環境変数を使用して SNIP が既に提供されていて、それを保持したい場合は、新しい SNIP と共に ConfigMap でそれらの SNIP を指定する必要があります。
  • ConfigMap を削除すると次のようになります。

    • ConfigMap SNIP によって生成されたすべての PBR が削除されます。SNIP が環境変数を介して提供される場合、その IP アドレスの PBR が追加されます。

    • NS_SNIPS 環境変数を使用して SNIP が提供されない場合、 feature-node-watch が有効になっているため、スタティックルートが追加されます。

Citrix ingress controller を展開した後、Citrix ADCでPBR構成を検証する

この検証例では、Citrix ingress controller がデプロイされた 2 ノードの Kubernetes クラスターと 2 つの SNIP を持つ次の ConfigMap を使用します。

イメージ

Citrix ingress controller がADCに次の構成を追加することを確認できます。

  1. ConfigMapによって提供されるすべてのNS_SNIPsIPsetが追加されます。

    イメージ

  2. ネットプロファイルがSrcIPセットとともにIPsetに追加されます 。

    イメージ

  3. Citrix ingress controller によって追加されたサービスグループには、ネットプロファイルセットが含まれます。

    イメージ

  4. 最後に、Citrix ingress controller は PBR を追加します。

    イメージ

    ここ:

    • PBR の数は (SNIP の数) * (Kubernetes ノードの数) に相当します。この場合、4 つの (2*2) PBR が追加されます。
    • PBRのsrcIPはConfigMapによってCitrix ingress controller に提供されるNS_SNIPSです。 destIP は Kubernetes ノードの CNI オーバーレイサブネット範囲です。
    • NextHop は Kubernetes ノードの IP アドレスです。
  5. Citrix ingress controller ラーのログを使用して、構成を検証することもできます。

    ログ

Citrix ノードコントローラーを使用した PBR の構成

Citrix ノードコントローラーを使用して 、複数の Kubernetes クラスターに対して PBR を構成できます。単一のCitrix ADCを使用して複数のKubernetesクラスターをネットワーク用のCitrix ノードコントローラーで負荷分散する場合、VXLANトンネルインターフェイスのIPアドレスにパケットを転送するために追加された静的ルートにより、ルートの競合が発生することがあります。PBRをサポートするには、CitrixノードコントローラーがCitrix Ingressコントローラーと連携してネットプロファイルをサービスグループにバインドする必要があります。

Citrix ノードコントローラーを使用して PBR を構成するには、次の手順を実行します。

  1. Citrix ノードコントローラーの起動時に、 CLUSTER_NAME を環境変数として指定します。この変数を指定すると、マルチクラスター展開であり、Citrix ノードコントローラーが静的ルートではなくPBRを構成することを示します。

    例:

    - name: CLUSTER_NAME 
      value: "dev-cluster"
    
  2. Citrix ingress controller デプロイ時に、 CLUSTER_NAME を環境変数として指定します。この値は、Citrix ノードコントローラーで指定された値と同じにする必要があります。

    例:

    - name: CLUSTER_NAME  
      value: "dev-cluster "
    
  3. Citrix ingress controller デプロイメントYAMLファイルの[引数]--enable-cnc-pbrTrueとしてセクションで引数を指定します。 この引数を指定すると、Citrix ingress controller は、Citrix ADC で Citrix ノードコントローラーが PBR を構成していることを認識します。

    例:

    args: 
     - --enable-cnc-pbr True          
    

注:

  • Citrix ノードコントローラーと Citrix ingress controller デプロイメントファイルでCLUSTER_NAMEに指定された値は、同じ Kubernetes クラスターにデプロイされる場合に一致する必要があります。

  • CLUSTER_NAME は、ネットプロファイルエンティティを作成し、Citrix ADC VPXまたはMPX上のサービスグループにバインドするときに使用されます。

Citrixノードコントローラーを展開した後、Citrix ADCでPBR構成を検証する

この検証例では、Citrix ノードコントローラーと Citrix ingress controller がデプロイされた 2 ノードの Kubernetes クラスターを使用します。

Citrix ノードコントローラーによって次の構成が ADC に追加されたことを確認できます。

  1. Citrix ADCノードとKubernetesノード間にVXLANトンネルネットワークを作成するときに、 Citrixノードコントローラーによって追加されたSNIPのsrcIPの値が設定されたネットプロファイルが追加されます。

    イメージ

  2. Citrix ingress controller は、作成したサービスグループにネットプロファイルをバインドします。

    イメージ

  3. 最後に、Citrix ノードコントローラーが PBR を追加します。

    イメージ

    ここ:

    • PBR の数は Kuberntes ノードの数と等しくなります。この場合、2 つの PBR が追加されます。
    • PBRのsrcIPはCitrix ノードコントローラーによってトンネルネットワークに追加されたSNIPです。 destIP は Kubernete ノードの CNI オーバーレイサブネット範囲です。 NextHop は Kubernetes ノードの VXLAN トンネルインターフェイスの IP アドレスです。

      注:

      Citrix ノードコントローラーは静的ルートの代わりにPBRを追加します。VXLAN とブリッジテーブルの残りの設定は変わりません。詳しくは、「 Citrix ノードコントローラーの構成」を参照してください。

複数の Kubernetes クラスタに対するポリシーベースのルーティングサポート