NetScaler® Kubernetes Gateway Controller を展開する

最終公開日 : Oct 02, 2026
展開プロセスには、トラフィックルーティングルールを定義する Gateway CRD を監視および管理する Gateway Controller の展開が含まれます。Gateway Controller は、外部リクエストをサンプルアプリケーションに誘導するように NetScaler VPX™ を構成します。
NetScaler Kubernetes Gateway Controller を展開する
  1. 開始するには、サンプルアプリケーションを展開します。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cnn-website
      labels:
        name: cnn-website
        app: cnn-website
    spec:
      selector:
        matchLabels:
          app: cnn-website
      replicas: 2
      template:
        metadata:
          labels:
            name: cnn-website
            app: cnn-website
        spec:
          containers:
          - name: cnn-website
            image: quay.io/sample-apps/cnn-website:v1.0.0
            ports:
            - name: http-80
              containerPort: 80
            - name: https-443
              containerPort: 443
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: cnn-website
      labels:
        app: cnn-website
    spec:
      type: NodePort
      ports:
      - name: http-80
        port: 80
        targetPort: 80
      - name: https-443
        port: 443
        targetPort: 443
        appProtocol: https
      selector:
        name: cnn-website
  2. Gateway API CRD がまだインストールされていない場合は、公式標準チャネル からインストールします。
  3. ユースケースに基づいて values.yaml を生成します。NetScaler Kubernetes Gateway Controller のインストール中に構成できる必須およびオプションのパラメータに関する情報については、構成 を参照してください。
    netscaler:
      adcCredentialSecret: "nslogin"
      nsIP: "4.4.4.10" # NetScaler Management IP or SNIP with Management access enabled for HA and CLIP for NetScaler Cluster
    gatewayController:
      entityPrefix: gwy
      gatewayControllerName: "citrix.com/nsgw-controller"
    license:
      accept: yes
    Kubernetes Gateway には、NetScaler MPX または NetScaler VPX 上のシステムユーザーアカウントのユーザー名とパスワードが必要です。NetScaler Kubernetes Gateway Controller が NetScaler MPX または VPX を構成できるように、NetScaler には必要な権限を持つデフォルト以外のシステムユーザーアカウントがあることを確認してください。NetScaler でシステムユーザーアカウントを作成する手順については、NetScaler で NetScaler Ingress Controller のシステムユーザーアカウントを作成する を参照してください。
    ユーザー名とパスワードを直接提供することも、Kubernetes シークレットを使用することもできます。Kubernetes シークレットを使用するには、次のコマンドでユーザー名とパスワードのシークレットを作成します。
    kubectl create secret  generic nslogin --from-literal=username=<username> --from-literal=password=<password>
    注:
    entityPrefix と gatewayControllerName は必須であり、NetScaler Kubernetes Gateway Controller のすべての展開で一意である必要があります。
  4. Helm チャートと、前のステップで生成された values.yaml を使用して、NetScaler Kubernetes Gateway Controller を展開します。詳細については、Helm Chart を使用した NetScaler Kubernetes Gateway Controller の展開 を参照してください。
    helm repo add netscaler https://netscaler.github.io/netscaler-helm-charts/

    helm install gateway-controller netscaler/netscaler-kubernetes-gateway-controller -f values.yaml

Gateway および HTTPRoute CRD を使用して HTTP 経由でアプリケーションを公開する

以下は、GatewayClass、Gateway、および HTTPRoute の定義の例です。
  1. Gateway オブジェクトを処理するコントローラーを定義するために GatewayClass リソースを作成します。
    GatewayClass の例
    apiVersion: gateway.networking.k8s.io/v1
    kind: GatewayClass
    metadata:
      name: example-gateway-class
    spec:
      controllerName: citrix.com/nsgw-controller
  2. 定義されたリスナーに基づいてサービスを公開するために、Gateway リソースを定義します。
    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: example-gateway
    spec:
      gatewayClassName: example-gateway-class
      listeners:
      - name: http
        protocol: HTTP
        port: 80
      addresses:
        - type: IPAddress
          value: 4.4.4.4
    注記:
    • Gateway で定義されている gatewayClassName が、前の手順で作成された GatewayClass リソースと一致することを確認します。
  3. HTTPRoute またはその他のルート CRD を適用して、バックエンドサービスにトラフィックをルーティングします。
    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: example-route
    spec:
      parentRefs:
      - name: example-gateway
      hostnames:
        - "example.com"
      rules:
      - matches:
        - path:
            type: PathPrefix
            value: /
        backendRefs:
        - name: cnn-website
          namespace: default
          port: 80
    注記:
    • parentRefs で指定されたゲートウェイ名が、前の手順で確立された Gateway CRD と一致することを確認します。
    • 現在、HTTPRoute CRD は単一の parentRef のみをサポートしています。
  4. gatewayClass のステータスを確認します。ステータスが ACCEPTED: True と表示されている場合、コントローラーはリソースを受け入れています。
    kubectl get gatewayclass
    NAME                     CONTROLLER                   ACCEPTED   AGE  
    example-gateway-class   citrix.com/nsgw-controller   True       2d
    kubectl describe gatewayclass
    ...
    Spec:
      Controller Name:  citrix.com/nsgw-controller
    Status:
      Conditions:
        Last Transition Time:  2025-03-21T09:15:32Z
        Message:               Accepted by the controller.
        Reason:                Accepted
        Status:                True
        Type:                  Accepted
    Events:                    <none>
    Gateway リソースのステータスを確認します。ステータスが PROGRAMMED : True と表示されている場合、コントローラーは設定を NetScaler に正常にプッシュしています。
    kubectl get gateway example-gateway

    NAME            CLASS                    ADDRESS  PROGRAMMED  AGE
    example-gateway  example-gateway-class  4.4.4.4   True       6d3h
    kubectl describe gateway example-gateway
    ...
    Status:
      Addresses:
        Type:   IPAddress
        Value:  4.4.4.4
      Conditions:
        Last Transition Time:  2025-03-24T08:53:07Z
        Message:               Accepted by the controller.
        Reason:                CreatedCRDInstance
        Status:                True
        Type:                  Accepted
        Last Transition Time:  2025-03-24T08:53:18Z
        Message:               Config pushed by the controller.
        Reason:                ConfigPushedToNetscaler
        Status:                True
        Type:                  Programmed
    Events:                    <none>

Gateway および HTTPRoute CRD を使用した HTTPS/SSL によるアプリケーションの公開

以下は、GatewayClass、Gateway、および HTTPRoute の定義の例です。
  1. コントローラーによって処理される Gateway オブジェクトを定義するために、GatewayClass リソースを作成します。
    GatewayClass の例
    apiVersion: gateway.networking.k8s.io/v1
    kind: GatewayClass
    metadata:
      name: example-gateway-class
    spec:
      controllerName: citrix.com/nsgw-controller
  2. (オプション) TLS 設定のために Gateway-Listener で使用する自己署名 SSL 証明書とキーを作成します。以下のコマンドは、自己署名証明書を作成するための単なるサンプルコマンドであり、アプリケーションのホスト名が example.com であることを前提としています。
    openssl genrsa -out cnnwebsite_key.pem 2048
    openssl req -new -key cnnwebsite_key.pem -out cnnwebsite_csr.pem -subj "/CN=example.com"
    openssl x509 -req -in cnnwebsite_csr.pem -sha256 -days 365 -extensions v3_ca -signkey cnnwebsite_key.pem -CAcreateserial -out cnnwebsite_cert.pem
    注:
    既存のSSL証明書がある場合は、それを使用してKubernetesシークレットを作成できます。
  3. SSL証明書とキー(TLSペア)を保存するためのKubernetesシークレットを作成します。
    kubectl create secret tls app1-secret --key cnnwebsite_key.pem --cert cnnwebsite_cert.pem
  4. HTTP (ポート 80) および HTTPS (ポート 443) 用のリスナーを持つGatewayリソースを作成します。Gatewayはアプリケーションを4.4.4.4で公開します。HTTPSリスナー内で、前の手順で作成したSSL証明書シークレットを参照します。
    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: example-gateway
    spec:
      gatewayClassName: example-gateway-class
      listeners:
      - name: http
        protocol: HTTP
        port: 80
      - name: https
        protocol: HTTPS
        port: 443
        tls:
          mode: Terminate
          certificateRefs:
          - kind: Secret
            name: app1-secret
      addresses:
        - type: IPAddress
          value: 4.4.4.4
  5. HTTPRouteリソースを適用して、受信トラフィックを1つ以上のバックエンドサービスにルーティングします。
    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: example-route
    spec:
      parentRefs:
      - name: example-gateway
      hostnames:
        - "example.com"
      rules:
      - matches:
        - path:
            type: PathPrefix
            value: /
        backendRefs:
        - name: cnn-website
          namespace: default
          port: 443
注:
  • アプリケーションはポート80 (HTTP) とポート443 (HTTPS) の両方で公開されます。
    • アプリケーションをHTTPSのみで公開するには、GatewayリソースのHTTPリスナー設定を除外します。
    • HTTPをHTTPSにリダイレクトするには、requestRedirect HTTPRouteフィルターを使用します。
  • バックエンドサービスがGatewayからのHTTPSトラフィックを期待する場合は、Service定義の対応するポート(例:ポート443)でappProtocolがhttpsに設定されていることを確認してください。参照:バックエンドプロコトルに関する詳細は、Gateway APIドキュメントを参照してください。

GatewayおよびTCPRoute CRDを使用してTCPアプリケーションを公開する

このセクションでは、NetScalerをゲートウェイインフラストラクチャとして使用し、Kubernetes Gateway APIを使用してTCPベースのアプリケーションを公開するための段階的な手順を説明します。

ステップ1:サンプルTCPアプリケーションをデプロイする

KubernetesクラスターにサンプルTCPアプリケーション(例:Redisサーバー)をデプロイします。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-server
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: redis:7.0
        ports:
        - containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
  name: redis-service
  namespace: default
spec:
  selector:
    app: redis
  ports:
  - port: 6379
    targetPort: 6379
    protocol: TCP
設定を適用します。
kubectl apply -f redis-deployment.yaml

ステップ2:GatewayClassを作成する

NetScaler Gateway Controllerを参照するGatewayClassリソースを作成します。
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: netscaler-gateway-class
spec:
  controllerName: citrix.com/netscaler-gateway-controller
GatewayClassを適用します。
kubectl apply -f gateway-class.yaml

ステップ3:TCPリスナーを持つGatewayを作成する

TCPプロトコルリスナーを持つGatewayリソースを作成します。addressesフィールドは、NetScaler上のVIPアドレスを指定します。
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: tcp-gateway
  namespace: default
spec:
  gatewayClassName: netscaler-gateway-class
  addresses:
    - type: IPAddress
      value: "192.168.1.100"
  listeners:
    - name: redis-listener
      protocol: TCP
      port: 6379
      allowedRoutes:
        namespaces:
          from: Same
Gatewayを適用します。
kubectl apply -f tcp-gateway.yaml

ステップ4:TCPRouteを作成する

Gatewayリスナーにアタッチし、バックエンドサービスにトラフィックをルーティングするTCPRouteリソースを作成します。
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: TCPRoute
metadata:
  name: redis-route
  namespace: default
spec:
  parentRefs:
    - name: tcp-gateway
      sectionName: redis-listener
  rules:
    - backendRefs:
        - name: redis-service
          port: 6379
TCPRouteを適用します。
kubectl apply -f tcp-route.yaml

ステップ5:構成を確認する

  1. Gatewayのステータスを確認します。
kubectl get gateway tcp-gateway -o yaml
  1. TCPRouteのステータスを確認します。
kubectl get tcproute redis-route -o yaml
AcceptedとProgrammedの両方の条件がstatus: "True"と表示されていることを確認します。
  1. TCP接続をテストします。
redis-cli -h 192.168.1.100 -p 6379 ping
期待される出力: PONG

GatewayおよびUDPRoute CRDを使用したUDPアプリケーションの公開

このセクションでは、NetScaler を使用した Kubernetes Gateway API を使って、UDP ベースのアプリケーション (DNS サーバーなど) を公開するための段階的な手順を説明します。

ステップ 1: サンプルの UDP アプリケーションを展開する

Kubernetes クラスターにサンプルの DNS サーバー (CoreDNS) を展開します。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: coredns-server
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: coredns
  template:
    metadata:
      labels:
        app: coredns
    spec:
      containers:
      - name: coredns
        image: coredns/coredns:1.11.1
        args: ["-conf", "/etc/coredns/Corefile"]
        ports:
        - containerPort: 5353
          protocol: UDP
        volumeMounts:
        - name: config-volume
          mountPath: /etc/coredns
      volumes:
      - name: config-volume
        configMap:
          name: coredns-config
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns-config
  namespace: default
data:
  Corefile: |
    .:5353 {
        forward . 8.8.8.8
        log
        errors
    }
---
apiVersion: v1
kind: Service
metadata:
  name: dns-service
  namespace: default
spec:
  selector:
    app: coredns
  ports:
  - port: 5353
    targetPort: 5353
    protocol: UDP
構成を適用します。
kubectl apply -f coredns-deployment.yaml

ステップ 2: GatewayClass を作成する

まだ作成されていない場合は、GatewayClass を作成します。
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: netscaler-gateway-class
spec:
  controllerName: citrix.com/netscaler-gateway-controller

ステップ 3: UDP リスナーを持つ Gateway を作成する

UDP プロトコルリスナーを持つ Gateway リソースを作成します。
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: udp-gateway
  namespace: default
spec:
  gatewayClassName: netscaler-gateway-class
  addresses:
    - type: IPAddress
      value: "192.168.1.101"
  listeners:
    - name: dns-listener
      protocol: UDP
      port: 53
      allowedRoutes:
        namespaces:
          from: Same
Gateway を適用します。
kubectl apply -f udp-gateway.yaml

ステップ 4: UDPRoute を作成する

Gateway リスナーにアタッチする UDPRoute リソースを作成します。
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: UDPRoute
metadata:
  name: dns-route
  namespace: default
spec:
  parentRefs:
    - name: udp-gateway
      sectionName: dns-listener
  rules:
    - backendRefs:
        - name: dns-service
          port: 5353
UDPRoute を適用します。
kubectl apply -f udp-route.yaml

ステップ 5: 構成を確認する

  1. Gateway のステータスを確認します。
kubectl get gateway udp-gateway -o yaml
  1. UDPRoute のステータスを確認します。
kubectl get udproute dns-route -o yaml
  1. Gateway経由でDNS解決をテストします:
dig @192.168.1.101 -p 53 example.com