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 LoadBalancer
のservice
を作成する標準の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 展開の詳細については、以下を参照してください。