Citrix ADC ingress controller

イングレス構成

Kubernetes Ingress は、リクエストホストまたはパスに基づいてリクエストをサービスにルーティングし、多数のサービスを 1 つのエントリポイントに集約する方法を提供します。

Citrix ingress controller はKubernetes Ingress を中心に構築され、Ingressリソース構成に基づいて1つ以上のCitrix ADCを自動的に構成します。

ホスト名ベースのルーティング

次のサンプルの Ingress 定義は、ホスト名に基づいてトラフィックをルーティングするように Ingress を設定する方法を示しています。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: virtual-host-ingress
  namespace: default
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - backend:
          service:
            name: service1
            port:
              number: 80
        pathType: Prefix
        path: /
  - host: bar.foo.com
    http:
      paths:
      - backend:
          service:
            name: service2
            port:
              number: 80
        pathType: Prefix
        path: /
<!--NeedCopy-->

サンプルのIngress定義が展開されると、ホストヘッダーを含むすべてのHTTP要求がCitrix ADCによってservice1に負荷分散されます。また、ホストヘッダー付きのHTTPリクエストは、Citrix ADCによってservice2へのロードバランサーになります。

パスベースルーティング

次のサンプルの Ingress 定義は、URL パスに基づいてトラフィックをルーティングするように Ingress を設定する方法を示しています。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: path-ingress
  namespace: default
spec:
  rules:
  - host: test.example.com
    http:
      paths:
      - backend:
          service:
            name: service1
            port:
              number: 80
        path: /foo
        pathType: Prefix
      - backend:
          service:
            name: service2
            port:
              number: 80
        path: /
        pathType: Prefix
<!--NeedCopy-->

サンプルのIngress定義が展開されると、ホストtest.example.comとURLパスにプレフィックス/fooが付いたHTTP要求があれば 、Citrix ADCは要求をservice1にルーティングし、他のすべての要求はservice2にルーティングされます 。

Citrix ingress controller は最初の一致ポリシーに従ってパスを評価します。効果的に一致させるために、Citrix ingress controller はパスの長さの降順に基づいてパスを並べ替えます。また、同じホストに属するパスが複数の Ingress リソースにまたがって順序付けられます。

ワイルドカードホストルーティング

次のサンプルの Ingress 定義は、ワイルドカードホストを使用して Ingress を設定する方法を示しています。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: wildcard-ingress
  namespace: default
spec:
  rules:
  - host: '*.example.com'
    http:
      paths:
      - backend:
          service:
            name: service1
            port:
              number: 80
        path: /
        pathType: Prefix
<!--NeedCopy-->

サンプルのIngress定義が展開されると、 example.com のすべてのサブドメインへのHTTP要求はCitrix ADCによってservice1にルーティングされます。

注:

ワイルドカードホスト以外のルールには、ワイルドカードホストよりも高い優先度が与えられます。異なるワイルドカードホスト間では、ルールはホストの長さの降順で並べられます。

完全パス照合

networking.k8s.io/v1 APIVersion に属する Ingressは、 完全一致のパスを考慮するためにPathType: Exactを利用することができます。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: Path-exact-Ingress
  namespace: default
spec:
  rules:
  - host: test.example.com
    http:
      paths:
      - backend:
          service:
            name: service1
            port:
              name: 80
        path: /exact
        pathType: Exact
<!--NeedCopy-->

(Kubernetes 1.22 以降では非推奨) extension/v1beta1に属する Ingresses のデフォルトでは、パスはPrefix式として扱われます。イングレス定義でアノテーションingress.citrix.com/path-match-method: "exact"を使用すると、Citrix ingress controller が定義され、完全一致のパスが考慮されます。

次のサンプルの Ingress 定義は、正確なパスマッチングのために Ingress を設定する方法を示しています。

apiVersion: extension/v1beta1
kind: Ingress
metadata:
  name: path-exact-ingress
  namespace: default
  annotations:
    ingress.citrix.com/path-match-method: "exact"
spec:
  rules:
  - host:test.example.com
    http:
      paths:
      - path: /exact
        backend:
          serviceName: service1
          servicePort: 80
<!--NeedCopy-->

サンプルのIngress定義が展開されると、パス/exactを含むHTTP要求はCitrix ADCによってservice1にルーティングされますが、/exact/somepathにはルーティングされません 。

非ホスト名ルーティング

次の例は、どのホストベースのルートにも一致しないデフォルトトラフィックのパスベースルーティングを示しています。このイングレスルールは、指定された IP アドレスを経由するすべてのインバウンド HTTP トラフィックに適用されます。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: default-path-ingress
  namespace: default
spec:
  rules:
  - http:
      paths:
      - backend:
          service:
            name: service1
            port:
              number: 80
        path: /foo
        pathType: Prefix
      - backend:
          service:
            name: service2
            port:
              number: 80
        path: /
        pathType: Prefix
<!--NeedCopy-->

ホスト名のイングレスルールに一致しないすべての着信トラフィックが、ルーティングのパスとしてここで照合されます。

デフォルトバックエンド

デフォルトのバックエンドは、いずれの Ingress ルールにも一致しないすべてのトラフィックを処理するサービスです。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: default-ingress
  namespace: default
spec:
  defaultBackend:
    service:
      name: testsvc
      port:
        number: 80

<!--NeedCopy-->

注:

Citrix ADC CPX がトラフィックの負荷分散を行っている場合は、グローバルなデフォルトバックエンドを指定できます。Citrix ADC VPXまたはMPXが入力デバイスである場合は、frontend-ip:portの組み合わせごとにデフォルトのバックエンドを作成できます。

イングレス構成