UDPベースのアプリケーションへのイングレストラフィックをロードバランスする方法
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