管理パーティションを持つNetScaler向けNetScaler Ingress Controllerを展開する

最終公開日 : Oct 02, 2026
NetScaler Ingress Controllerは、Ingressリソース構成に基づいて1つ以上のNetScalerを自動的に構成するために使用されます。Ingress NetScalerアプライアンス(MPXまたはVPX)は、管理パーティションと呼ばれる論理エンティティに分割でき、各パーティションは個別のNetScalerアプライアンスとして構成および使用できます。詳細については、管理パーティションを参照してください。NetScaler Ingress Controllerは、管理パーティションを持つNetScalerを構成するためにも展開できます。
管理パーティションを持つNetScalerの場合、各パーティションに対してNetScaler Ingress Controllerの単一インスタンスを展開する必要があります。また、そのパーティションはNetScaler Ingress Controllerインスタンスに固有のパーティションユーザーに関連付けられている必要があります。
注:
NetScaler Metrics Exporterは、NetScalerの管理パーティションからメトリクスをエクスポートすることをサポートしています。

前提条件

以下を確認してください。
  • NetScalerアプライアンスで管理パーティションが構成されていること。手順については、管理パーティションの構成を参照してください。
  • NetScaler Ingress Controller専用のパーティションユーザーを作成します。NetScaler Ingress Controllerは、このパーティションユーザーアカウントを使用してNetScalerを構成します。このパーティションユーザーをNetScalerアプライアンス内の他のパーティションに関連付けないようにしてください。
    注:
    管理パーティションでのSSL関連のユースケースについては、NetScalerバージョン12.0–56.8以降を使用していることを確認してください。

管理パーティションを持つNetScaler向けNetScaler Ingress Controllerを展開するには

  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-k8s-ingress-controller.yamlファイルを編集し、以下の環境変数の値を入力します。
    環境変数 必須またはオプション 説明
    NS_IP 必須 NetScalerアプライアンスのIPアドレスです。詳細については、前提条件を参照してください。
    NS_USER および NS_PASSWORD 必須 NetScaler Ingress Controller用に作成したパーティションユーザーのユーザー名とパスワードです。詳細については、前提条件を参照してください。
    NS_VIP 必須 NetScaler Ingress Controllerは、この環境変数で提供されるIPアドレスを使用して、Ingressトラフィックを受信するNetScalerに仮想IPアドレスを構成します。注: NS_VIPは、Ingress YAMLでfrontend-ipアノテーションが指定されていない場合のフォールバックとして機能します。Ingressのみがサポートされます。
    NS_SNIPS オプション NetScalerアプライアンス上のSNIPアドレス、またはNetScalerアプライアンス上の特定の管理者パーティション上のSNIPアドレスを指定します。
    NS_ENABLE_MONITORING 必須 NetScalerを監視するには、Yesの値を設定します。注: 管理パーティションを持つNetScalerの場合、NetScaler監視を無効にしてください。値をNoに設定します。
    EULA 必須 エンドユーザーライセンス契約。値をYesとして指定します。
    Kubernetes_url オプション NetScaler Ingress Controllerがイベントを登録するために使用するkube-apiserverのURL。値が指定されていない場合、NetScaler Ingress Controllerは内部kube-apiserver IPアドレスを使用します。
    LOGLEVEL オプション NetScaler Ingress Controllerによって生成されるログを制御するためのログレベル。デフォルトでは、値はDEBUGに設定されています。サポートされている値は、CRITICAL、ERROR、WARNING、INFO、DEBUGです。詳細については、ログレベルを参照してください。
    NS_PROTOCOL と NS_PORT オプション NetScaler Ingress ControllerがNetScalerと通信するために使用する必要があるプロトコルとポートを定義します。デフォルトでは、NetScaler Ingress Controllerはポート443でHTTPSを使用します。ポート80でHTTPを使用することもできます。
    イングレスクラス オプション 複数のイングレスロードバランサーが異なるイングレスリソースの負荷分散に使用される場合。この環境変数を使用して、特定のイングレスクラスに関連付けられたNetScalerを構成するようにNetScaler Ingress Controllerを指定できます。イングレスクラスの詳細については、「イングレスクラスのサポート」を参照してください。
  3. 環境変数を更新したら、YAMLファイルを保存し、次のコマンドを使用してデプロイします。
    kubectl create -f citrix-k8s-ingress-controller.yaml
  4. 次のコマンドを使用して、NetScaler Ingress Controllerが正常にデプロイされたことを確認します。
    kubectl get pods --all-namespaces

ユースケース: NetScaler Consoleのパーティションを使用してマルチテナントのマイクロサービスベースアプリケーションを安全に提供する方法

NetScaler Ingress Controllerを使用すると、NetScaler Consoleのパーティションで、異なるマイクロサービスベースアプリケーション間のイングレストラフィックを分離できます。NetScaler Consoleのパーティションは、単一のNetScalerインスタンスでソフトウェアレベルでのマルチテナンシーを可能にします。各パーティションには、独自のコントロールプレーンとネットワークプレーンがあります。
クラスター内の各名前空間にNetScaler Ingress Controllerのインスタンスを1つデプロイできます。
たとえば、Kubernetesクラスターに2つの名前空間があり、これらを2つの異なる管理者で互いに分離したいとします。管理者パーティション機能を使用して、これら2つの名前空間を分離できます。名前空間1と名前空間2を作成し、これら両方の名前空間にNetScaler Ingress Controllerを個別にデプロイします。
NetScaler Ingress Controllerインスタンスは、YAMLマニフェストで指定されたシステムユーザーアカウントを使用して、それぞれのNetScalerパーティションに構成指示を提供します。
管理者パーティションを使用してKubernetesクラスターのワークロードを管理するNetScaler
この例では、apacheとguestbookのサンプルアプリケーションが、Kubernetesクラスター内の2つの異なる名前空間(それぞれ名前空間1と名前空間2)にデプロイされています。apacheとguestbookの両方のアプリケーションチームは、ワークロードを独立して管理し、リソースを共有したくないと考えています。NetScaler Consoleのパーティションはマルチテナンシーの実現に役立ち、この例では、両方のアプリケーションワークロードを個別に管理するために2つのパーティション(default、partition1)が使用されます。
以下の前提条件が適用されます。
  • NetScalerアプライアンスで管理者パーティションを構成していることを確認してください。手順については、「管理者パーティションの構成」を参照してください。
  • NetScaler Ingress Controller専用のパーティションユーザーアカウントを作成していることを確認してください。NetScaler Ingress Controllerは、このパーティションユーザーアカウントを使用してNetScalerを構成します。このパーティションユーザーをNetScalerアプライアンスの他のパーティションに関連付けないでください。

例

Kubernetesクラスター内の異なる名前空間に異なるアプリケーションをデプロイする方法と、管理パーティションを使用してADCからリクエストを分離する方法を、以下のシナリオ例で示します。
この例では、2つのサンプルアプリケーションがKubernetesクラスター内の2つの異なる名前空間にデプロイされています。この例では、apacheアプリケーションにはNetScalerのデフォルトパーティションが使用され、guestbookアプリケーションには管理パーティションp1が使用されます。

名前空間を作成する

次のコマンドを使用して、2つの名前空間ns1とns2を作成します。
kubectl create namespace ns1
kubectl create namespace ns2

名前空間ns1での構成

  1. ns1にapacheアプリケーションをデプロイします。
    apiVersion: v1
    kind: Namespace
    metadata:
      name: ns1

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: apache-ns1
      name: apache-ns1
      namespace: ns1
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: apache-ns1
      template:
        metadata:
          labels:
            app: apache-ns1
        spec:
          containers:
          - image: httpd
            name: httpd
    ---

    apiVersion: v1
    kind: Service
    metadata:
      creationTimestamp: null
      labels:
        app: apache-ns1
      name: apache-ns1
      namespace: ns1
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: apache-ns1
  2. ns1にNetScaler Ingress Controllerをデプロイします。
    NetScaler Ingress Controllerをデプロイするには、YAMLファイルを使用するか、Helmチャートを使用できます。
    デフォルトパーティションにバインドされているユーザー資格情報を使用していることを確認してください。
    helm install cic-def-part-ns1 citrix/citrix-ingress-controller --set nsIP=<nsIP of ADC>,license.accept=yes,adcCredentialSecret=nslogin,ingressClass[0]=citrix-def-part-ns1 --namespace ns1
  3. Ingressリソースをデプロイします。
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-apache-ns1
      namespace: ns1
      annotations:
        ingress.citrix.com/frontend-ip: "< ADC VIP IP >"
    spec:
      ingressClassName: "citrix-def-part-ns1"
      rules:
      - host: apache-ns1.com
        http:
          paths:
          - backend:
              service:
                name: apache-ns1
                port:
                  number: 80
            pathType: Prefix
            path: /index.html
  4. ns1のNetScaler Ingress Controllerは、デフォルトパーティション内のADCエンティティを構成します。

名前空間ns2での構成

  1. ns2にguestbookアプリケーションをデプロイします。
    apiVersion: v1
    kind: Namespace
    metadata:
      name: ns2
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: redis-master
      namespace: ns2
      labels:
        app: redis
        tier: backend
        role: master
    spec:
      ports:
      - port: 6379
        targetPort: 6379
      selector:
        app: redis
        tier: backend
        role: master
    ---
    apiVersion: apps/v1 #  for k8s versions before 1.9.0 use apps/v1beta2  and before 1.8.0 use extensions/v1beta1
    kind: Deployment
    metadata:
      name: redis-master
      namespace: ns2
    spec:
      selector:
        matchLabels:
          app: redis
          role: master
          tier: backend
      replicas: 1
      template:
        metadata:
          labels:
            app: redis
            role: master
            tier: backend
        spec:
          containers:
          - name: master
            image: k8s.gcr.io/redis:e2e  # or just image: redis
            resources:
              requests:
                cpu: 100m
                memory: 100Mi
            ports:
            - containerPort: 6379
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: redis-slave
      namespace: ns2
      labels:
        app: redis
        tier: backend
        role: slave
    spec:
      ports:
      - port: 6379
      selector:
        app: redis
        tier: backend
        role: slave
    ---
    apiVersion: apps/v1 #  for k8s versions before 1.9.0 use apps/v1beta2  and before 1.8.0 use extensions/v1beta1
    kind: Deployment
    metadata:
      name: redis-slave
      namespace: ns2
    spec:
      selector:
        matchLabels:
          app: redis
          role: slave
          tier: backend
      replicas: 2
      template:
        metadata:
          labels:
            app: redis
            role: slave
            tier: backend
        spec:
          containers:
          - name: slave
            image: gcr.io/google_samples/gb-redisslave:v1
            resources:
              requests:
                cpu: 100m
                memory: 100Mi
            env:
            - name: GET_HOSTS_FROM
              value: dns
              # If your cluster config does not include a dns service, then to
              # instead access an environment variable to find the master
              # service's host, comment out the 'value: dns' line above, and
              # uncomment the line below:
              # value: env
            ports:
            - containerPort: 6379
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: frontend
      namespace: ns2
      labels:
        app: guestbook
        tier: frontend
    spec:
      # if your cluster supports it, uncomment the following to automatically create
      # an external load-balanced IP for the frontend service.
      # type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: guestbook
        tier: frontend
    ---
    apiVersion: apps/v1 #  for k8s versions before 1.9.0 use apps/v1beta2  and before 1.8.0 use extensions/v1beta1
    kind: Deployment
    metadata:
      name: frontend
      namespace: ns2
    spec:
      selector:
        matchLabels:
          app: guestbook
          tier: frontend
      replicas: 3
      template:
        metadata:
          labels:
            app: guestbook
            tier: frontend
        spec:
          containers:
          - name: php-redis
            image: gcr.io/google-samples/gb-frontend:v4
            resources:
              requests:
                cpu: 100m
                memory: 100Mi
            env:
            - name: GET_HOSTS_FROM
              value: dns
              # If your cluster config does not include a dns service, then to
              # instead access environment variables to find service host
              # info, comment out the 'value: dns' line above, and uncomment the
              # line below:
              # value: env
            ports:
            - containerPort: 80
  2. 名前空間ns2にNetScaler Ingress Controllerをデプロイします。
    パーティションp1にバインドされているユーザー資格情報を使用していることを確認してください。
    helm install cic-adm-part-p1 citrix/citrix-ingress-controller --set nsIP=&lt;nsIP of ADC>,nsSNIPS='[&lt;SNIPs in partition p1>]',license.accept=yes,adcCredentialSecret=admin-part-user-p1,ingressClass[0]=citrix-adm-part-ns2 --namespace ns2
  3. guestbookアプリケーション向けにIngressを展開します。
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
      ingress.citrix.com/frontend-ip: "&lt;VIP in partition 1>"
      name: guestbook-ingress
      namespace: ns2
    spec:
      ingressClassName: citrix-adm-part-ns2
      rules:
      - host: www.guestbook.com
        http:
          paths:
          - backend:
              service:
                name: frontend
                port:
                  number: 80
            path: /
            pathType: Prefix
  4. ns2のNetScaler Ingress Controllerは、p1パーティション内のADCエンティティを設定します。