NetScaler Ingressコントローラー

Ingress トラフィックを TCP または UDP ベースのアプリケーションに負荷分散する方法

Kubernetes 環境では、Ingress は Kubernetes クラスターの外部から Kubernetes サービスへのアクセスを許可するオブジェクトです。標準の Kubernetes Ingress リソースは、すべてのトラフィックが HTTP ベースであり、TCP、TCP-SSL、UDP などの HTTP ベース以外のプロトコルには対応していないと想定しています。したがって、標準の Kubernetes Ingress を使用して DNS、FTP、LDAP などのレイヤー 7 プロトコルに基づく重要なアプリケーションを公開することはできません。

NetScalerは、Ingressアノテーションを使用してTCPまたはUDPベースのIngressトラフィックの負荷分散を行うソリューションを提供します。入力リソース定義でこれらのアノテーションを指定すると、 NetScaler Ingress Controllerは、TCPまたはUDPベースのIngressトラフィックの負荷分散を行うようにNetScalerを構成します

Kubernetes Ingress リソース定義で以下のアノテーションを使用して、TCP または UDP ベースの Ingress トラフィックの負荷を分散できます。

  • ingress.citrix.com/insecure-service-type:このアノテーションにより、NetScaler のプロトコルとして TCP、UDP、または ANY を使用したL4負荷分散が可能になります。
  • ingress.citrix.com/insecure-port: 注釈によって TCP ポートが設定されます。このアノテーションは、非標準ポートでマイクロサービスアクセスが必要な場合に役立ちます。デフォルトでは、ポート 80 が設定されています。

注釈について詳しくは、 注釈ページを参照してください

Citrix ADCでtype LoadBalancerserviceを作成する標準のKubernetesソリューションを使用することもできます。 サービスタイプLoadBalancerの詳細については、Citrix ADCを参照してください

サンプル:TCP ベースのイングレスのイングレス定義。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.citrix.com/insecure-port: "6379"
    ingress.citrix.com/insecure-service-type: "tcp"
    kubernetes.io/ingress.class: "guestbook"
  name: redis-master-ingress
spec:
  defaultBackend:
    service:
      name: redis-master-pods
      port:
        number: 6379
<!--NeedCopy-->

サンプル:UDP ベースの Ingress のイングレス定義以下は、NetScalerIngress Controller バージョン1.1.1のサンプルです。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    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
<!--NeedCopy-->

サービス定義の例を次に示します。サービスポート名はudp-53として定義されています。

apiVersion: v1
kind: Service
metadata:
  name: bind
  labels:
    app: bind
spec:
  ports:
  - name: udp-53
    port: 53
    targetPort: 53
    protocol: UDP
  selector:
    name: bind
<!--NeedCopy-->

サンプル:UDP ベースの Ingress のイングレス定義以下は、NetScalerIngress Controller バージョン1.5.25のサンプルです。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.citrix.com/insecure-port: "5084"
    ingress.citrix.com/insecure-service-type: "udp"
  name: udp-ingress
spec:
  defaultBackend:
    service:
      name: frontend
      port:
        number: 53
<!--NeedCopy-->

TCP over SSL に基づいて上りトラフィックの負荷分散

NetScaler Ingress Controllerには、SSL経由のTCPに基づいてIngressトラフィックの負荷分散に使用できる'ingress.citrix.com/secure-service-type: ssl_tcpアノテーションが用意されています。

サンプル:SSL ベースの Ingress 経由の TCP のイングレス定義

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.citrix.com/secure-service-type: "ssl_tcp"
    ingress.citrix.com/secure_backend: '{"frontendcolddrinks":"True"}'
    kubernetes.io/ingress.class: "colddrink"
  name: colddrinks-ingress
spec:
  defaultBackend:
    service:
      name: frontend-colddrinks
      port:
        number: 443
  tls:
  - secretName: "colddrink-secret"
<!--NeedCopy-->

TCP または UDP ベースのアプリケーションのパフォーマンスを監視し、改善する

アプリケーション開発者は、NetScaler のリッチモニター(TCP-ECV、UDP-ECV など)を使用して、TCPまたはUDPベースのアプリケーションの状態を綿密に監視できます。ECV (拡張コンテンツ検証) モニターは、 アプリケーションが予期したコンテンツを返しているかどうかを確認するのに役立ちます。

また、Source IPなどの永続化メソッドを使用することで、アプリケーションのパフォーマンスを向上させることができます。これらのCitrix ADC機能は、 Kubernetesのスマートアノテーションを通じて使用できます 。その一例を以下に挙げます。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:  
    ingress.citrix.com/frontend-ip: "192.168.1.1"
    ingress.citrix.com/insecure-port: "80"
    ingress.citrix.com/lbvserver: '{"mongodb-svc":{"lbmethod":"SRCIPDESTIPHASH"}}'
    ingress.citrix.com/monitor: '{"mongodbsvc":{"type":"tcp-ecv"}}'
  name: mongodb
spec:
  rules:
  - host: mongodb.beverages.com
    http:
      paths:
      - backend:
          service:
            name: mongodb-svc
            port:
              number: 80
        path: /
        pathType: Prefix
<!--NeedCopy-->

NetScaler Ingress Controllerがサポートするさまざまな展開オプションについて詳しくは、「展開トポロジー」を参照してください。

NetScaler Ingress Controller 展開の詳細については、以下を参照してください。

Ingress トラフィックを TCP または UDP ベースのアプリケーションに負荷分散する方法