Citrix ADC ingress controller

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

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

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

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

  • ingress.citrix.com/insecure-service-type:このアノテーションにより、Citrix ADC のプロトコルとして 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 のイングレス定義以下は、Citrix ingress 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 のイングレス定義以下は、Citrix ingress 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 に基づいて上りトラフィックの負荷分散

Citrix ingress controller には、TCP over SSLに基づいて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 ベースのアプリケーションのパフォーマンスを監視し、改善する

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

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

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.citrix.com/csvserver: '{"l2conn":"on"}'
    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-->

Citrix ingress controller でサポートされるさまざまな展開オプションについて詳しくは、「 展開トポロジ」を参照してください。

Citrix ingress controller ラーの展開について詳しくは、以下を参照してください。

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