Citrix ADC ingress controller

アノテーションによる Ingress に対するリスナー CRD のサポート

Ingress は、バックエンド Kubernetes サービスへの HTTP ルーティング機能を指定する標準の Kubernetes リソースです。Citrix Ingress Controller には、フロントエンド構成とバックエンド構成の両方について、Ingressパラメーターを微調整するためのさまざまな注釈が用意されています。たとえば、 ingress.citrix.com/frontend-ip アノテーションを使用して、Citrix Ingress Controller によってCitrix ADCで構成されたフロントエンドリスナーのIPアドレスを指定できます。同様に、HTTP および SSL パラメーターを微調整するためのフロントエンドアノテーションもあります。複数の Ingress リソースがあり、それらがフロントエンド IP とポートを共有している場合、各 Ingress リソースでこれらのアノテーションを指定することは困難です。

ネットワーク運用プロフェッショナル (NetOps) と開発者の間で責任が分かれている場合があります。NetOps は、フロントエンド IP、証明書、SSL パラメータなどのフロントエンド構成を考案する責任があります。HTTP ルーティングとバックエンドの設定は開発者が担当します。Citrix Ingress Controllerは、フロントエンド構成用のリスナーCRDおよびおよびバックエンドルーティングロジック用のHTTProuteなどのコンテンツルーティングCRDをすでに提供しています。 Citrix が提供するアノテーションを使用して、リスナーCRDをIngressリソースに適用できるようになりました。

この機能により、Ingress リソースにリスナー CRD を使用し、フロントエンド構成の作成を Ingress 定義から切り離すことができます。そのため、NetOps はリスナーリソースを個別に定義して、フロントエンド IP、証明書、およびその他のフロントエンドパラメータ(TCP、HTTP、SSL)を構成できます。設定変更は、各 Ingress リソースを変更しなくても、リスナーリソースに適用できます。Citrix ADCでは、リスナーリソースはコンテンツスイッチング仮想サーバー、SSL仮想サーバー、証明書キー、フロントエンドHTTP、SSL、およびTCPプロファイルに対応します。

注:

この機能を使用する場合は、同じフロントエンド IP とポートを持つすべてのイングレスが同じリスナーリソースを参照するようにする必要があります。同じフロントエンド IP とポートの組み合わせを使用する Ingress の場合、1 つの Ingress がリスナーリソースを参照し、もう 1 つの Ingress がingress.citrix.com/frontend-ipアノテーションを参照することはサポートされていません。

制限

Listener をフロントエンド構成に使用すると、次のアノテーションは無視され、効果がない可能性があります。

  • ingress.citrix.com/frontend-ip
  • Ingress.citrix.com/frontend-ipset-name
  • ingress.citrix.com/secure-port
  • ingress.citrix.com/insecure-port
  • ingress.citrix.com/insecure-termination
  • ingress.citrix.com/secure-service-type
  • ingress.citrix.com/insecure-service-type
  • ingress.citrix.com/csvserver
  • ingress.citrix.com/frontend-tcpprofile
  • ingress.citrix.com/frontend-sslprofile
  • ingress.citrix.com/frontend-httpprofile

Ingress 用のリスナー CRD リソースのデプロイ

ingress.citrix.com/listener アノテーションを使用すると、Ingress の Listener リソースの名前と名前空間をnamespace/nameの形式で指定できます。リスナーリソースが Ingress と同じ名前空間にある場合、名前空間は必要ありません。

次に、注釈の例を示します。

ingress.citrix.com/listener: default/listener1

ここで、 default はリスナーリソースの名前空間で、 listener1 はフロントエンドパラメータを指定するリスナーリソースの名前です。

Ingress のリスナーリソースをデプロイするには、次の手順を実行します。

  1. リスナーリソース (listener.yaml) を次のように作成します。

    apiVersion: citrix.com/v1
    kind: Listener
    metadata:
      name: my-listener
      namespace: default
    spec:
      ingressClass: citrix
      vip: '192.168.0.1' # Virtual IP address to be used, not required when CPX is used as ingress device
      port: 443
      protocol: https
      redirectPort: 80
      secondaryVips:
      - "10.0.0.1"
      - "1.1.1.1"
      policies:
        httpprofile:
          config:
            websocket: "ENABLED"
        tcpprofile:
          config:
            sack: "ENABLED"
        sslprofile:
          config:
            ssl3: "ENABLED"
        sslciphers:
        - SECURE
        - MEDIUM
        analyticsprofile:
          config:
          - type: webinsight
            parameters:
              allhttpheaders: "ENABLED"
        csvserverConfig:
          rhistate: 'ACTIVE'
    

    ここで、デフォルト名前空間の Listener リソースmy-listenerは、VIP、セカンダリ VIP、HTTP プロファイル、TCP プロファイル、SSL プロファイル、SSL 暗号などのフロントエンド設定を指定します。Citrix ADC ポート443にHTTPSトラフィック用のコンテンツスイッチング仮想サーバーが作成され、ポート80のすべてのHTTPトラフィックがHTTPSにリダイレクトされます。

    注:

    Citrix ADC CPXが入力デバイスとして使用されている場合、 リスナーリソースのvipフィールドは必要ありません。Citrix ADC VPXの場合、VIPはCitrix Ingress Controller によって自動的に構成されるポッドのIPアドレスと同じです。

  2. リスナーリソースを適用します。

    kubectl apply -f listener.yaml
    
  3. リスナーリソースを参照して Ingress リソース (ingress.yaml) を作成します。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-ingress
      namespace: default
      annotations:
        ingress.citrix.com/listener: my-listener
        kubernetes.io/ingress.class: "citrix"
    spec:
      tls:
      - secretName: my-secret
        hosts:
        - example.com
      rules:
      - host: example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: kuard
                port:
                  number: 80
    

    ここで、Ingressリソースmy-ingressは、 フロントエンド設定のデフォルト名前空間の Listener リソースmy-listenerを参照します。

  4. Ingress リソースを適用します。

    kubectl apply -f ingress.yaml
    

証明書管理機能

Ingress リソースの証明書を指定するには 2 つの方法があります。証明書は Ingress リソースの一部として指定することも、リスナーリソースの一部として提供することもできます。

Ingress リソースによる証明書管理

この方法では、以下のように、すべての証明書が通常の Ingress リソースの一部として指定されます。リスナーリソースに証明書が指定されていません。このモードでは、Ingress リソースの一部として証明書を指定する必要があります。

  apiVersion: networking.k8s.io/v1
  kind: Ingress
  metadata:
    name: my-ingress
    namespace: default
    annotations:
      ingress.citrix.com/listener: my-listener
      kubernetes.io/ingress.class: "citrix"
  spec:
    tls:
    - secretName: my-secret
      hosts:
      - example.com
    rules:
    - host: example.com
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: kuard
              port:
                number: 80

リスナーリソースによる証明書管理

この方法では、証明書は Listener リソースの一部として提供されます。Ingress リソースの一部として証明書を指定する必要はありません。

次の Listener リソースの例は、証明書を示しています。

apiVersion: citrix.com/v1
kind: Listener
metadata:
  name: my-listener
  namespace: default
spec:
  ingressClass: citrix
  certificates:
  - secret:
      name: my-secret
    # Secret named 'my-secret' in current namespace bound as default certificate
    default: true
  - secret:
      # Secret 'other-secret' in demo namespace bound as SNI certificate
      name: other-secret
      namespace: demo
  vip: '192.168.0.1' # Virtual IP address to be used, not required when CPX is used as ingress device
  port: 443
  protocol: https
  redirectPort: 80

Ingress リソースでは、次の例に示すようにシークレットは指定されていません。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  namespace: default
  annotations:
    ingress.citrix.com/listener: my-listener
    kubernetes.io/ingress.class: "citrix"
spec:
  tls:
  # TLS field is empty as the certs are specified in Listener
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: kuard
            port:
              number: 80
アノテーションによる Ingress に対するリスナー CRD のサポート