Ingressクラスのサポート

最終公開日 : Oct 02, 2026

Ingressクラスとは?

Kubernetesクラスターには複数のIngressコントローラーが存在する可能性があり、特定のIngressリソースをIngressコントローラーに関連付ける方法が必要です。
Ingressリソース定義でingressClassNameを使用することで、Ingressリソースを処理するIngressコントローラーを指定できます。

ネットスケーラー イングレス コントローラー と イングレス クラス

NetScaler Ingress Controllerは、spec.ingressClassNameを持つ複数のIngressリソースを受け入れることをサポートしています。各Ingressリソースは1つのingress.classのみに関連付けることができます。ただし、Ingress Controllerは異なるクラスからの様々なIngressリソースを処理する必要がある場合があります。
YAMLファイルのspecセクションにある--ingress-classes引数を使用して、Ingress Controllerを複数のIngressクラスに関連付けることができます。
Ingress Controllerに対してingress-classesが指定されていない場合、IngressオブジェクトにingressClassNameが存在するかどうかにかかわらず、すべてのIngressリソースを受け入れます。
ingress-classesが指定されている場合、Ingress ControllerはingressClassNameに一致するIngressリソースのみを受け入れます。この場合、Ingressコントローラーはingress.classのないIngressリソースを処理しません。
注: Ingressクラス名は大文字と小文字を区別しません。

Ingressクラスを含むYAML設定の例

以下は、ingress-classesをIngress Controllerに関連付けるためのサンプルYAMLファイルからの抜粋です。この設定は、Ingress Controllerがスタンドアロンポッドとして実行される場合と、NetScaler CPXのサイドカーとして実行される場合の両方で機能します。指定されたYAMLスニペットでは、以下のIngressクラスがIngress Controllerに関連付けられています。
  • my-custom-class
  • Citrix
spec:
    serviceAccountName: cic-k8s-role
    containers:
    - name: cic-k8s-ingress-controller
      image:"quay.io/citrix/citrix-k8s-ingress-controller:latest"
      # specify the ingress classes names to be supportedbyIngress Controller in args section.
      # First line should be --ingress-classes, andeverysubsequent line should be
      # the name of allowed ingress class. In the givenexampletwo classes named
      # "citrix" and "my-custom-class" are accepted. Thiswill be case-insensitive.
      args:
        - --ingress-classes
          Citrix
          my-custom-class
以下は、Ingressクラスの関連付けが示されているIngress YAMLファイルからの抜粋です。指定された例では、web-ingressという名前のIngressリソースがIngressクラスmy-custom-classに関連付けられています。NetScaler Ingress Controllerがmy-custom-classを受け入れるように構成されている場合、このIngressリソースを処理します。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
  name: web-ingress
spec:
  ingressClassName: my-custom-class

Ingress V1とIngressClassのサポート

Kubernetesバージョン1.19では、Ingressリソースが一般提供されるようになりました。 この変更の一環として、IngressClassという名前の新しいリソースがIngress APIに追加されました。このリソースを使用すると、特定のIngressコントローラーをIngressに関連付けることができます。IngressClassリソースの詳細については、Kubernetesドキュメントを参照してください。
以下は、IngressClassリソースのサンプルです。

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: citrix
spec:
  controller: citrix.com/ingress-controller
IngressClassリソースは、以下に示すようにIngressルールを実装するコントローラーに関連付けられたIngressクラスを参照する必要があります。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
spec:
  ingressClassName: citrix
  rules:
  - host: abc.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 80
NetScaler Ingress Controllerは、Ingressを照合するために以下のルールを使用します。
  • NetScaler Ingress Controllerが--ingress-classes引数を指定せずに起動された場合:
    • Kubernetesのバージョンが1.19未満の場合(IngressClass V1リソースがサポートされています)
      • 任意のIngressオブジェクトに一致します
    • Kubernetesのバージョンが1.19以上の場合(IngressClass V1リソースがサポートされています)
      • spec.ingressClassNameフィールドが設定されていない任意のIngressオブジェクトに一致します。
      • Ingressオブジェクトのspec.ingressClassNameフィールドが設定されており、同じ名前のv1.IngressClassリソースが存在し、そのリソースのspec.controllerフィールドがcitrix.com/ingress-controllerである場合、任意のIngressに一致します。
  • NetScaler Ingress Controllerが--ingress-classes引数を使用して1つ以上のIngressクラスを設定して起動された場合。
    • Kubernetesのバージョンが1.19未満の場合(IngressClass V1リソースがサポートされています)
      • 設定されたIngressクラスと一致するIngressクラスアノテーションkubernetes.io/ingress.classを持つ任意のIngressに一致します。
    • Kubernetesのバージョンが1.19以上の場合(IngressClass V1リソースがサポートされています)。
      • 設定されたイングレスクラスとイングレスクラスアノテーション kubernetes.io/ingress.class が一致するすべてのイングレスに一致します。このアノテーションは非推奨ですが、下位互換性をサポートするために spec.IngressClassName フィールドよりも優先度が高くなります。
      • 次の属性を持つ v1.IngressClass リソースが存在する場合、任意のイングレスオブジェクトに一致します。
        • リソースの名前が --ingress-classes 引数の値と一致します。
        • リソースの spec.controller フィールドが citrix.com/ingress-controller として設定されています。
        • リソースの名前がIngressオブジェクトの spec.ingressClassName フィールドと一致します。
      • spec.ingressClassName フィールドが設定されておらず、かつ次の属性を持つ v1.IngressClass リソースが存在する場合、任意のイングレスオブジェクトに一致します。
        • リソースの名前が --ingress-classes 引数の値と一致します。
        • リソースの spec.controller フィールドが citrix.com/ingress-controller として設定されています。
        • リソースは ingressclass.kubernetes.io/is-default-class アノテーションを使用してデフォルトクラスとして構成されます。詳細については、Kubernetes ドキュメント を参照してください。
注:
  • アノテーションと spec.ingressClassName の両方が定義されている場合、アノテーションは spec.ingressClassName よりも前に照合されます。アノテーションが一致しない場合、spec.ingressClassName フィールドの照合操作は実行されません。
  • Helm チャートを使用して NetScaler Ingress Controller をインストールする場合、IngressClass リソースがサポートされており、NetScaler Ingress Controller が --ingress-classes 引数で展開されている場合、v1.IngressClass リソースはデフォルトで作成されます。

指定されたIPアドレスを持つIngressリソースのIngressステータスを更新する

NetScaler Ingress Controller によって管理されるIngressリソースの Status.LoadBalancer.Ingress フィールドを割り当てられたIPアドレスで更新するには、NetScaler Ingress Controller の起動時にコマンドライン引数 --update-ingress-status yes を指定します。
注:
Helmデプロイの場合、update-ingress-status に対応するHelmチャートのパラメータは updateIngressStatus であり、true に設定する必要があります。
この機能は、スタンドアロンおよびサイドカーNSICデプロイメントの両方でサポートされています。サイドカーとしてデプロイされたNSICの場合、この機能はNSICバージョン2.2.10以降でサポートされます。

サイドカーデプロイメントのIngressステータス更新

Kubernetesでは、Ingressは複数のアプリケーションを外部に公開するための単一のエントリポイントとして使用できます。Ingressには、Ingressの作成が成功した後に更新される Address (Status.LoadBalancer.IP) フィールドがあります。このフィールドは、Kubernetesアプリケーションに到達できるパブリックIPアドレスまたはホスト名で更新されます。クラウドデプロイメントでは、このフィールドはクラウドロードバランサーのIPアドレスまたはホスト名であることもあります。
クラウドデプロイメントでは、NetScaler CPXはIngressコントローラーとともに、type LoadBalancer タイプのサービスを使用して公開され、これによりクラウドロードバランサーが作成されます。クラウドロードバランサーは、NetScaler CPXをIngressコントローラーとともに公開します。したがって、NetScaler CPXで公開されるIngressリソースは、クラウドロードバランサーのパブリックIPアドレスまたはホスト名を使用して更新する必要があります。
この更新はオンプレミスデプロイメントにも適用されます。
  • デュアルティアIngressデプロイメントにおいて、NetScaler CPXがタイプ LoadBalancer のサービスを使用してティア1 NetScaler VPX Ingressに公開されている場合、NetScaler CPXによって操作されるIngressリソースの Address (Status.LoadBalancer.IP) フィールドはVIPアドレスで更新されます。
  • デュアルティアIngressデプロイメントにおいて、NetScaler CPXがタイプ ClusterIP または NodePort のサービスを使用して公開されている場合、NetScaler CPXによって操作されるIngressリソースの Address (Status.LoadBalancer.IP) フィールドは、CPXサービスのクラスターIPアドレスで更新されます。

Ingressステータス更新後のIngress出力例

以下は、Ingressステータス更新後のIngress出力例です。
    $ kubectl get ingress

    NAME             HOSTS              ADDRESS                           PORTS    AGE
    sample-ingress   sample.citrix.com   sample.abc.somexampledomain.com   80      1d