NetScaler Ingress ControllerにおけるLoadBalancerタイプのKubernetesサービスサポートの機能強化

最終公開日 : Oct 02, 2026
NetScaler Ingress ControllerにおけるLoadBalancerタイプのKubernetesサービスサポートは、以下の機能で強化されています。
  • BGPルートヘルスインジェクション (RHI) のサポート
  • ノードのラベルで定義された一連のノード (ゾーン) におけるサービスのポッドの可用性に基づいて、ロードバランサーIPアドレス (VIP) をアドバタイズまたはリコールする

NetScalerでのBGP RHIの自動構成のサポート

ルートヘルスインジェクション (RHI) により、NetScalerはBGPを使用してネットワーク全体にホストルートとしてVIPの可用性をアドバタイズできます。ただし、RHIをサポートするには、NetScalerで手動で構成を実行する必要がありました。Kubernetes環境に展開されたNetScaler Ingress Controllerを使用すると、NetScalerでのVIPアドバタイズの構成を自動化できます。
LoadBalancer タイプのサービスが作成されると、NetScaler Ingress Controllerはサービス用のVIPをNetScalerに構成します。NetScaler Ingress ControllerでBGP RHIサポートが有効になっている場合、NetScalerはVIPをBGPネットワークにアドバタイズするように自動的に構成されます。service.citrix.com/vipparams アノテーションを使用すると、VIPのIPパラメーターを有効にできます。たとえば、NetScaler Ingress Controllerを使用したNetScalerでのBGP RHIの構成 のステップ5にある service.YAML ファイルを参照してください。サポートされているIPパラメーターの詳細については、nsip configuration を参照してください。

ポッドの可用性に基づいてVIPをアドバタイズおよびリコールする

次の図に示すトポロジでは、Kubernetesクラスター内のノードは3つの異なるラックに物理的に分散されています。それらは論理的に3つのゾーンにグループ化されています。各ゾーンには、Tier-1 ADCとしてNetScaler MPXがあり、Kubernetesクラスター内の同じ場所にNetScaler Ingress Controllerがあります。すべてのゾーンのNetScaler Ingress Controllerは、同じKubernetes APIサーバーをリッスンします。したがって、LoadBalancer タイプのサービスが作成されるたびに、クラスター内のすべてのNetScalerは同じIPアドレスをBGPファブリックにアドバタイズします。ゾーンにワークロードがない場合でも、そのゾーンのNetScalerはIPアドレスをアドバタイズします。
サンプル トポロジ
NetScalerは、ゾーン内のポッドの可用性に基づいてVIPをアドバタイズまたはリコールするソリューションを提供します。NetScaler Ingress Controllerが同じゾーンに属するノードを識別できるように、各ゾーンのノードにラベルを付ける必要があります。各ゾーンのNetScaler Ingress Controllerは、ゾーン内のノードにポッドがあるかどうかを確認します。ゾーン内のノードにポッドがある場合、VIPをアドバタイズします。それ以外の場合は、そのゾーンのNetScalerからVIPのアドバタイズを取り消します。

NetScaler Ingress Controllerを使用したNetScalerでのBGP RHIの構成

このトピックでは、サンプル トポロジに基づいて、NetScaler Ingress Controllerを使用してNetScalerでBGP RHIを構成する方法について説明します。このトポロジでは、Kubernetesクラスター内のノードは2つのゾーンに展開されています。各ゾーンには、Tier-1 ADCとしてNetScaler VPXまたはMPXがあり、KubernetesクラスターでADCを構成するためのNetScaler Ingress Controllerがあります。ADCは、BGPを使用してアップストリームルーターとピアリングされています。
BGP RHI構成サンプル トポロジ

前提条件

  • アップストリームルーターとBGPピアとしてNetScaler MPXまたはVPXを設定します。
サンプルトポロジに基づいてBGP RHIサポートを設定するには、次の手順を実行します。
  1. 次のコマンドを使用して、各ゾーンのノードにラベルを付けます。
    ゾーン1の場合:
    kubectl label nodes node1 rack=rack-1
    kubectl label nodes node2 rack=rack-1
    ゾーン2の場合:
    kubectl label nodes node3 rack=rack-2
    kubectl label nodes node4 rack=rack-2
  2. NetScaler Ingress Controller構成YAMLファイルで、次の環境変数を次のように設定します。
    ゾーン1の場合:
    - name: "NODE_LABELS"
      value: "rack-1"
    - name: "BGP_ADVERTISEMENT"
      value: "True"
    ゾーン2の場合:
    - name: "NODE_LABELS"
      value: "rack-2"
    - name: "BGP_ADVERTISEMENT"
      value: "True"
    ゾーン1にNetScaler Ingress Controllerをデプロイするためのサンプルcic.yamlファイルは次のとおりです。
    apiVersion: v1
    kind: Pod
    metadata:
      name: cic-k8s-ingress-controller-1
      labels:
        app: cic-k8s-ingress-controller-1
    spec:
      serviceAccountName: cic-k8s-role
      containers:
      - name: cic-k8s-ingress-controller
        image: "quay.io/citrix/citrix-k8s-ingress-controller:1.36.5"

        env:
        # Set NetScaler NSIP/SNIP, SNIP in case of HA (mgmt has to be enabled)
        - name: "NS_IP"
          value: "10.217.212.24"
       # Set username for Nitro
        - name: "NS_USER"
          valueFrom:
            secretKeyRef:
              name: nslogin
              key: username
       # Set user password for Nitro
        - name: "NS_PASSWORD"
          valueFrom:
            secretKeyRef:
            name: nslogin
            key: password
        - name: "EULA"
          value: "yes"
        - name: "NODE_LABELS"
          value: "rack=rack-1"
        - name: "BGP_ADVERTISEMENT"
          value: "True"
    args:
      - --ipam
        citrix-ipam-controller
    imagePullPolicy: Always
  3. 次のコマンドを使用してNetScaler Ingress Controllerをデプロイします。
    注:
    NetScaler Ingress Controllerを両方のラック(ゾーンごと)にデプロイする必要があります。
    Kubectl create -f cic.yaml
  4. web-frontend-lb.yamlファイルを使用してサンプルアプリケーションをデプロイします。
    Kubectl create -f web-frontend-lb.yaml を実行します。
    web-frontend-lb.yamlの内容は次のとおりです。
    apiVersion: v1
    kind: Deployment
    metadata:
      name: web-frontend
    spec:
      selector:
        matchLabels:
          app: web-frontend
      replicas: 4
      template:
        metadata:
          labels:
            app: web-frontend
        spec:
          containers:
          - name: web-frontend
            image: 10.217.6.101:5000/web-test:latest
            ports:
              - containerPort: 80
            imagePullPolicy: Always
  5. アプリケーションを公開するために、LoadBalancerタイプのサービスを作成します。
    Kubectl create -f web-frontend-lb-service.yaml
    web-frontend-lb-service.yamlの内容は以下のとおりです。
    apiVersion: v1
    kind: Service
    metadata:
      name: web-frontend
      annotations:
        service.citrix.com/class: 'cic-vpx'
        service.citrix.com/frontend-ip: 1.1.1.1
        service.citrix.com/vipparams: '{"vserverrhilevel": "ONE_VSERVER", "hostroute": "ENABLED", "metric": 10}'
      labels:
        app: web-frontend
    spec:
      type: LoadBalancer
      ports:
      - port: 80
        protocol: TCP
        name: http
      selector:
        app: web-frontend
  6. 以下のコマンドを使用して、NetScaler上でサービスグループの作成を確認します。
    show servicegroup <service-group-name>
    以下は、そのコマンドのサンプル出力です。
    #  show servicegroup k8s-web-frontend_default_80_svc_k8s-web-frontend_default_80_svc

    k8s-web-frontend_default_80_svc_k8s-web-frontend_default_80_svc - TCP
    State: ENABLED Effective State: UP Monitor Threshold : 0
    Max Conn: 0 Max Req: 0 Max Bandwidth: 0 kbits
    Use Source IP: NO
    Client Keepalive(CKA): NO
    TCP Buffering(TCPB): NO
    HTTP Compression(CMP): NO
    Idle timeout: Client: 9000 sec Server: 9000 sec
    Client IP: DISABLED
    Cacheable: NO
    SC: OFF
    SP: OFF
    Down state flush: ENABLED
    Monitor Connection Close : NONE
    Appflow® logging: ENABLED
    ContentInspection profile name: ???
    Process Local: DISABLED
    Traffic Domain: 0


    1)   10.217.212.23:30126 State: UP Server Name: 10.217.212.23 Server ID: None Weight: 1
      Last state change was at Wed Jan 22 23:35:11 2020
      Time since last state change: 5 days, 00:45:09.760

      Monitor Name: tcp-default  State: UP Passive: 0
      Probes: 86941 Failed [Total: 0 Current: 0]
      Last response: Success - TCP syn+ack received.
      Response Time: 0 millisec

    2)   10.217.212.22:30126 State: UP Server Name: 10.217.212.22 Server ID: None Weight: 1
      Last state change was at Wed Jan 22 23:35:11 2020
      Time since last state change: 5 days, 00:45:09.790

      Monitor Name: tcp-default State: UP Passive: 0
      Probes: 86941 Failed [Total: 0 Current: 0]
      Last response: Success - TCP syn+ack received.
  7. 以下のコマンドを使用して、BGPルーター上でVIPアドバタイズメントを確認します。
     >VTYSH
    # show ip route bgp
      B       172.29.46.78/32   [200/0] via 2.2.2.100, vlan20, 1d00h35m
                                [200/0] via 2.2.2.101, vlan20, 1d00h35m
      Gateway of last resort is not set