UDPベースのアプリケーションへのイングレストラフィックをロードバランスする方法

最終公開日 : Oct 02, 2026
Kubernetes環境では、イングレスオブジェクトは、Kubernetesクラスターの外部からKubernetesサービスへのアクセスを許可します。標準のKubernetesイングレスリソースは、すべてのトラフィックがHTTPベースであると想定しており、TCP、UDP、SSLなどの非HTTPベースのプロトコルには対応していません。したがって、DNS、FTP、LDAPなどの非HTTPアプリケーションは、標準のKubernetesイングレスを使用して公開することはできません。
NetScalerは、イングレスアノテーションを使用してUDPベースのイングレストラフィックをロードバランスするソリューションを提供します。イングレスリソース定義でこれらのアノテーションを指定すると、NetScaler Ingress ControllerはNetScalerを構成して、UDPベースのイングレストラフィックをロードバランスします。
Kubernetesイングレスリソース定義で次のアノテーションを使用して、UDPベースのイングレストラフィックをロードバランスできます。
  • ingress.citrix.com/insecure-service-type: このアノテーションは、NetScalerのプロトコルとしてUDPまたはANYを使用してL4ロードバランシングを有効にします。
  • ingress.citrix.com/insecure-port: このアノテーションはUDPトラフィックのポートを構成します。これは、非標準ポートでマイクロサービスアクセスが必要な場合に役立ちます。デフォルトでは、ポート80が構成されています。
アノテーションの詳細については、アノテーションを参照してください。
NetScalerでLoadBalancerタイプのサービスを作成する標準的なKubernetesソリューションを使用することもできます。NetScalerのサービスタイプLoadBalancerについて詳しく知ることができます。
例: UDPベースのイングレスのイングレス定義。
kubectl apply -f - <<EOF  
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.citrix.com/frontend-ip: "192.168.1.1" # If you are using IPAM then use ingress.citrix.com/ipam-range: "<IPAM Range Name>"
    ingress.citrix.com/insecure-port: "5084"
    ingress.citrix.com/insecure-service-type: "udp"
  name: udp-ingress
spec:
  defaultBackend:
    service:
      name: frontend
      port:
        name: udp-53  # Service port name defined in the service defination
EOF
例: サービスポート名がudp-53として定義されているサービス定義:
kubectl apply -f - <<EOF  
apiVersion: v1
kind: Service
metadata:
  name: bind
  labels:
    app: bind
spec:
  ports:
  - name: udp-53
    port: 53
    targetPort: 53
    protocol: UDP
  selector:
    name: bind
EOF

UDPベースのアプリケーションのパフォーマンスを監視および改善する

アプリケーション開発者は、NetScalerの豊富なモニター(UDP-ECVなど)を通じて、UDPベースのアプリケーションの健全性を綿密に監視できます。ECV(拡張コンテンツ検証)モニターは、アプリケーションが期待されるコンテンツを返すかどうかを確認するのに役立ちます。NetScaler Ingress Controllerは、バックエンドサービスの健全性を監視するために使用できるingress.citrix.com/monitorアノテーションを提供します。NetScalerの組み込みモニターの詳細については、組み込みモニターを参照してください。
また、Source IPなどの永続化メソッドを使用することで、アプリケーションのパフォーマンスを向上させることができます。これらのNetScaler機能は、Kubernetesのスマートアノテーションを通じて使用できます。
次のイングレスリソースの例では、スマートアノテーションを使用しています。
kubectl apply -f - <<EOF  
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.citrix.com/frontend-ip: "192.168.1.1" # If you are using IPAM then use ingress.citrix.com/ipam-range: "<IPAM Range Name>"
    ingress.citrix.com/insecure-port: "80"
    ingress.citrix.com/lbvserver: '{"mongodb-svc":{"lbmethod":"SRCIPDESTIPHASH"}}'
    ingress.citrix.com/monitor: '{"mongodbsvc":{"type":"UDP-ECV"}}'
  name: mongodb
spec:
  rules:
  - host: mongodb.beverages.com
    http:
      paths:
      - backend:
          service:
            name: mongodb-svc
            port:
              number: 80
        path: /
        pathType: Prefix
EOF

NetScaler CPXサービスで非標準HTTPポートを公開する方法

NetScaler CPXサービスで、UDPトラフィックを他のポートで許可するために、80番および443番以外のポートを公開する必要がある場合があります。 このセクションでは、Kubernetesクラスターにデプロイする際に、NetScaler CPXサービスで他の非標準HTTPポートを公開する方法について説明します。

Helmチャートの展開の場合

Helmチャートを使用してイングレスコントローラーとともにNetScaler CPXをデプロイする際に、非標準HTTPポートを公開するには、Helmチャートのインストールガイドを参照してください。
servicePorts:
  - port: 8080
    protocol: UDP
    name: udp0
  - port: 6798
    protocol: UDP
    name: udp1
  - port: 6379
    protocol: UDP
    name: udp3

OpenShift Operatorを使用する展開の場合

OpenShift Operatorを使用する展開の場合、NetScaler Operatorを使用してNetScaler CPXのサイドカーとしてNetScaler Ingress Controllerを展開するのステップ6で指定されているように、イングレスコントローラーとともにCPXを作成するためにYAML定義を編集し、serviceセクションの下にポートを次のように指定する必要があります。
service:
  annotation: {}
  spec:
    type: NodePort  # ClusterIP or LoadBalancer
    ports:
    - port: 6790
      targetPort: 6790
      protocol: UDP
      name: udp1
    - port: 6379
      targetPort: 6379
      protocol: UDP
      name: udp0