Kubernetes IngressのHTTPRoute CRDを使用した高度なコンテンツルーティング
KubernetesネイティブのIngressは、NetScaler Ingress Controllerでサポートされている基本的なホストおよびパスベースのルーティングを提供します。 NetScalerは、高度なルーティング機能をサポートするために、コンテンツルーティングCRDを使用する代替アプローチも提供します。コンテンツルーティングCRDには、Listener CRDとHTTPRoute CRDが含まれます。これらのCRDは、正規表現ベースの式や、クエリパラメータ、Cookie、HTTPヘッダー、その他のNetScalerカスタム式に基づくコンテンツスイッチングなど、高度なコンテンツルーティング機能を提供します。
Ingressバージョン
networking.k8s.io/v1では、Kubernetesはリソースバックエンドのサポートを導入しています。リソースバックエンドは、Ingressオブジェクトと同じ名前空間内の別のKubernetesリソースへのObjectRefです。
現在、NetScalerはIngressのリソースバックエンドとしてHTTPルートCRDリソースの設定をサポートしています。デフォルトでは、Ingressはパスおよびホストベースのルーティングのような限られたコンテンツルーティング機能のみをサポートしています。この機能により、Ingressに高度なコンテンツルーティング機能を拡張し、さまざまなコンテンツスイッチングオプションを設定できます。特定のドメインの場合、Kubernetes Ingress APIのサードパーティ互換性サポートを失うことなく、
HTTPRouteカスタムリソースを使用してコンテンツスイッチングを設定できます。
注:
-
この機能は、Kubernetes 1.19以降のバージョンで利用可能なKubernetes Ingressバージョン
networking.k8s.io/v1をサポートしています。 -
同じドメインでIngressパスルーティングと
HTTPRouteが使用されている場合、HTTPRouteリソースからのすべてのコンテンツルーティングポリシーは、Ingressベースのコンテンツルーティングポリシーよりも優先度が低くなります。したがって、高度なコンテンツルーティングが必要な場合は、特定のドメインに対してHTTPRouteリソースのすべてのコンテンツスイッチングポリシーを設定することをお勧めします。
HTTPRoute CRDを使用してKubernetes Ingressの高度なコンテンツルーティングを設定する
この手順では、高度なコンテンツルーティングをサポートするために、HTTPRouteリソースをリソースバックエンドとしてデプロイする方法を示します。
前提条件
-
KubernetesクラスターでIngress APIバージョン
networking.k8s.io/v1が利用可能であることを確認してください。 -
HTTPRoute CRDがデプロイされていることを確認してください。
Ingressリソースをデプロイする
YAMLファイルで、リソースバックエンドが
HTTPRouteカスタムリソースを指すようにIngressリソースを定義します。証明書、フロントエンドプロファイル、フロントエンドIPアドレス、Ingressクラスなど、すべてのフロントエンド設定をIngressリソースの一部として指定します。
以下は、
sample-ingress.yamlという名前のIngressリソースのサンプルです。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kuard-ingress
annotations:
ingress.citrix.com/frontend-ip: "x.x.x.x"
ingress.citrix.com/insecure-termination: "redirect"
spec:
ingressClassName: citrix
tls:
- secretName: web-ingress-secret
rules:
- host: kuard.example.com
http:
paths:
- pathType: ImplementationSpecific
backend:
resource:
apiGroup: citrix.com
kind: HTTPRoute
name: kuard-example-route
YAMLファイルでIngressリソースを定義した後、次のコマンドを使用してYAMLファイルをデプロイします。ここで、
sample-ingress.yamlはYAMLファイルの定義です。
kubectl apply -f sample-ingress.yaml
この例では、ドメイン
kuard.example.comのコンテンツスイッチングポリシーは、kuard-example-routeという名前のHTTPRouteカスタムリソースの一部として定義されています。Certificates、frontend-ip、およびingress classはIngressリソースの一部として指定されています。ロードバランシング方法やサービスグループ構成などのバックエンドアノテーションは、HTTPRouteカスタムリソースの一部として指定されています。
HTTPRouteリソースをデプロイする
YAMLファイルでHTTPルート構成を定義します。YAMLファイルでは、
kindフィールドでHTTPRouteを使用し、specセクションでHTTPルート構成の要件に基づいてHTTPRoute CRD属性を追加します。
APIの説明と例の詳細については、HTTPRouteドキュメントを参照してください。
以下は、
HTTPRouteリソース構成のサンプルです。この例は、さまざまなKubernetesバックエンドマイクロサービスに対してクエリパラメータベースのコンテンツスイッチングを使用する方法を示しています。
apiVersion: citrix.com/v1
kind: HTTPRoute
metadata:
name: kuard-example-route
spec:
hostname:
- kuard.example.com
rules:
- name: kuard-blue
match:
- queryParams:
- name: version
contains: v2
action:
backend:
kube:
service: kuard-blue
port: 80
- name: kuard-green
match:
- queryParams:
- name: version
contains: v3
action:
backend:
kube:
service: kuard-green
port: 80
- name: kuard-default
match:
- path:
prefix: /
action:
backend:
kube:
service: kuard-purple
port: 80
YAMLファイルでHTTPルートを定義したら、YAMLファイルをデプロイします。この例では、
httprouteがYAML定義です。
kubectl apply -f httproute.yaml