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

最終公開日 : Oct 02, 2026
Ingressは、バックエンドのKubernetesサービスへのHTTPルーティング機能を提供する標準的なKubernetesリソースです。NetScaler Ingress Controllerは、フロントエンドとバックエンドの両方の構成についてIngressパラメータを微調整するためのさまざまなアノテーションを提供します。たとえば、ingress.citrix.com/frontend-ipアノテーションを使用すると、NetScaler Ingress ControllerによってNetScalerに構成されたフロントエンドリスナーのIPアドレスを指定できます。同様に、HTTPおよびSSLパラメータを微調整するための他のフロントエンドアノテーションもあります。複数のIngressリソースがあり、それらがフロントエンドIPとポートを共有している場合、これらのアノテーションを各Ingressリソースに指定するのは困難です。
ネットワーク運用プロフェッショナル(NetOps)と開発者の間で責任が分かれている場合があります。NetOpsは、フロントエンドIP、証明書、SSLパラメータなどのフロントエンド構成を担当します。開発者は、HTTPルーティングとバックエンド構成を担当します。NetScaler Ingress Controllerは、すでにフロントエンド構成用のリスナーCRDやバックエンドルーティングロジック用のHTTProuteなどのコンテンツルーティングCRDを提供しています。 現在、リスナーCRDは、NetScalerが提供するアノテーションを使用してIngressリソースに適用できます。
この機能により、IngressリソースにリスナーCRDを使用し、フロントエンド構成の作成をIngress定義から分離できます。したがって、NetOpsはリスナーリソースを個別に定義して、フロントエンドIP、証明書、およびその他のフロントエンドパラメータ(TCP、HTTP、SSL)を構成できます。各Ingressリソースを変更することなく、リスナーリソースに構成変更を適用できます。NetScalerでは、リスナーリソースはコンテンツスイッチング仮想サーバー、SSL仮想サーバー、証明書キー、およびフロントエンドのHTTP、SSL、TCPプロファイルに対応します。
注記:
  • Analyticsプロファイルを機能させるには、NetScaler Observability Exporterを構成する必要があります。詳細については、「ConfigMapを使用したAnalytics構成のサポート」を参照してください。
  • この機能を使用する場合、同じフロントエンドIPとポートを持つすべてのIngressが同じリスナーリソースを参照していることを確認する必要があります。同じフロントエンドIPとポートの組み合わせを使用するIngressの場合、一方のIngressがリスナーリソースを参照し、もう一方のIngressがingress.citrix.com/frontend-ipアノテーションを参照することはサポートされていません。

制限事項

リスナーがフロントエンド構成に使用される場合、以下のアノテーションは無視され、効果がない場合があります。
  • 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 用の Listener CRD リソースのデプロイ

ingress.citrix.com/listener アノテーションを使用して、Ingress 用の Listener リソースの名前と名前空間を namespace/name の形式で指定できます。Listener リソースが Ingress と同じ名前空間にある場合、名前空間は必須ではありません。
アノテーションの例を次に示します。
ingress.citrix.com/listener: default/listener1
ここで、default は Listener リソースの名前空間であり、listener1 はフロントエンドパラメータを指定する Listener リソースの名前です。
Ingress 用の Listener リソースをデプロイするには、次の手順を実行します。
  1. 次のように Listener リソース (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 暗号などのフロントエンド構成を指定します。NetScaler にポート 443 で HTTPS トラフィック用のコンテンツスイッチング仮想サーバーを作成し、ポート 80 のすべての HTTP トラフィックは HTTPS にリダイレクトされます。
    注:
    NetScaler CPX が Ingress デバイスとして使用される場合、Listener リソースの vip フィールドは必須ではありません。NetScaler VPX の場合、VIP は NetScaler Ingress Controller によって自動的に構成されるポッド IP アドレスと同じです。
  2. Listener リソースを適用します。
    kubectl apply -f listener.yaml
  3. Listenerリソースを参照して、Ingressリソース (ingress.yaml) を作成します。
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-ingress
      namespace: default
      annotations:
        ingress.citrix.com/listener: my-listener
    spec:
      ingressClassName: citrix
      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リソースの一部として証明書を指定するか、Listenerリソースの一部として証明書を提供できます。

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

このアプローチでは、すべての証明書は通常のIngressリソースの一部として次のように指定されます。Listenerリソースは証明書を指定しません。このモードでは、Ingressリソースの一部として証明書を指定する必要があります。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  namespace: default
  annotations:
    ingress.citrix.com/listener: my-listener
spec:
  ingressClassName: citrix
  tls:
  - secretName: my-secret
    hosts:
    - example.com
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: kuard
            port:
              number: 80

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

このアプローチでは、証明書は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
spec:
  ingressClassName: citrix
  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