Citrix ADC ingress controller

httpRoute CRD を使用した Kubernetes Ingress の高度なコンテンツルーティング

Kubernetes ネイティブ Ingress は、Citrix ingress controller でサポートされる基本的なホストおよびパスベースのルーティングを提供します。 Citrix は、高度なルーティング機能をサポートするために、コンテンツルーティングCRDを使用する代替アプローチも提供しています。コンテンツルーティング CRD には、リスナー CRD と httpRoute CRD が含まれます。これらのCRDは、正規表現ベースの式や、クエリパラメーター、Cookie、HTTPヘッダー、その他のCitrix ADCカスタム式に基づくコンテンツスイッチングなど、高度なコンテンツルーティング機能を提供します。

Ingress バージョンnetworking.k8s.io/v1では 、Kubernetes ではリソースバックエンドのサポートが導入されています。リソースバックエンドは、Ingress オブジェクトと同じ名前空間内の別の Kubernetes リソースに対するObjectRefです。

IngressでHTTPルートCRDリソースをリソースバックエンドとして構成できるようになりました。Ingress では、パスやホストベースのルーティングなど、制限されたコンテンツルーティング機能のみがデフォルトでサポートされます。この機能により、高度なコンテンツルーティング機能を Ingress に拡張し、さまざまなコンテンツスイッチングオプションを設定できます。特定のドメインに対して、Kubernetes Ingress API のサードパーティ互換性サポートを失うことなく、 HTTPRoute カスタムリソースを使用してコンテンツスイッチングを設定できます。

アーキテクチャ

注:

  • この機能は、Kubernetes 1.19 以降のバージョンnetworking.k8s.io/v1で利用可能な Kubernetes Ingress バージョンをサポートします。

  • Ingress パスルーティングおよびHTTPRouteが同じドメインで使用されている場合、 HTTPRoute リソースのすべてのコンテンツルーティングポリシーは、Ingress ベースのコンテンツルーティングポリシーよりも優先度が低くなります。そのため、高度なコンテンツルーティングが必要な場合は、 特定のドメインに対してHTTPRouteリソースのすべてのコンテンツスイッチングポリシーを構成することをお勧めします。

httpRoute CRD を使用して Kubernetes Ingress の高度なコンテンツルーティングを設定する

この手順では、HTTProute リソースをリソースバックエンドとしてデプロイし、高度なコンテンツルーティングをサポートする方法を説明します。

前提条件

  • Kubernetes クラスターで Ingress API バージョンnetworking.k8s.io/v1が使用可能であることを確認します。
  • httpRoute CRD がデプロイされていることを確認します。

Ingress リソースをデプロイする

YAML ファイル内のHTTPRouteカスタムリソースを指すリソースバックエンドで Ingress リソースを定義します。Ingress リソースの一部として、証明書、フロントエンドプロファイル、フロントエンド IP アドレス、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"
    kubernetes.io/ingress.class: citrix
    ingress.citrix.com/insecure-termination: "redirect"
spec:
  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
<!--NeedCopy-->

YAML ファイルで Ingress リソースを定義したら、次のコマンドを使用して YAML ファイルをデプロイします。ここで sample-ingress.yaml はYAML ファイルの定義を示します。

kubectl apply -f sample-ingress.yaml

この例では、ドメインkuard.example.comのコンテンツスイッチングポリシーは、kuard-example-routeというHTTPRouteカスタムリソースの一部として定義されています。 Certificatesfrontend-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
<!--NeedCopy-->

YAML ファイルで HTTP ルートを定義したら、YAML ファイルをデプロイします。この例では、 httproute は YAML の定義です。

kubectl apply -f httproute.yaml
httpRoute CRD を使用した Kubernetes Ingress の高度なコンテンツルーティング