イングレス・クラスのサポート
イングレス・クラスって何ですか
Kubernetes クラスターには複数の Ingress コントローラーが存在する場合があり、特定の Ingress リソースを Ingress コントローラーに関連付ける方法が必要です。
Ingress リソース定義でkubernetes.io/ingress.class
アノテーションを使用することで、Ingress リソースを処理する Ingress コントローラーを指定できます。
NetScaler Ingress Controller とイングレスクラス
NetScaler Ingress Controllerは、kuberneters.io/ingress.class
アノテーション付きの複数の入力リソースの受け入れをサポートします。各イングレスリソースは 1 つのingress.class
のみに関連付けることができます。ただし、Ingress Controller は、異なるクラスからのさまざまな Ingress リソースを処理する必要がある場合があります。
YAMLファイルのspec
セクションにある--ingress-classes
引数を使用して、IngIngress Controller を複数の Ingress クラスに関連付けることができます。
Ingress Controllerにingress-classes
が指定されていない場合は、Ingress オブジェクトにkubernetes.io/ingress.class
アノテーションが存在するかどうかに関係なく、すべての Ingress リソースを受け入れます。
ingress-classes
が指定されている場合、Ingress Controller はkubernetes.io/ingress.class
アノテーションに一致する Ingress リソースのみを受け入れます。このような場合、Ingress コントローラーはingress.class
アノテーションなしで Ingress リソースを処理しません。
注:Ingress クラス名では大文字と小文字は区別されません。
Ingress クラスを使用した YAML 設定のサンプル
Ingress Controllerにingress-classes
を関連付けるサンプル 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
<!--NeedCopy-->
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:
kubernetes.io/ingress.class: my-custom-class
name: web-ingress
<!--NeedCopy-->
入力 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
<!--NeedCopy-->
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
<!--NeedCopy-->
NetScaler Ingress Controllerは、次のルールを使用してイングレスと照合します。
-
--ingress-classes
引数を指定せずにNetScaler Ingress Controller を起動した場合:-
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 に一致します。
-
-
-
--ingress-classes
引数を使用して設定された1つ以上の入力クラスでNetScaler Ingress Controllerを起動した場合。-
Kubernetes のバージョンが 1.19 より前の場合 (IngressClass V1 リソースはサポートされています)
- 入力クラス注釈
kubernetes.io/ingress.class
が一致する任意の入力を、設定された入力クラスの入力クラスと照合します。
- 入力クラス注釈
-
Kubernetes のバージョンが 1.19 以上の場合 (IngressClass V1 リソースはサポートされています)。
-
イングレスクラスアノテーション
kubernetes.io/ingress.class
が設定されたイングレスクラスと一致するすべてのイングレスに一致します。このアノテーションは非推奨ですが、下位互換性をサポートするためにspec.IngressClassName
フィールドよりも優先されます。 -
次の属性を持つ
v1.IngressClass
リソースが存在する場合、任意の Ingress オブジェクトに一致します。-
--ingress-classes
リソースの名前は引数の値と一致します。 -
リソースの
spec.controller
フィールドはcitrix.com/ingress-controller
として設定されます 。 -
リソースの名前は Ingress オブジェクトの
spec.ingressClassName
フィールドと一致します。
-
-
spec.ingressClassName
フィールドが設定されておらず、 次の属性を持つv1.IngressClass
リソースが存在するすべての Ingress オブジェクトに一致します。-
リソースの名前は
--ingress-classes
引数の値と一致します。 -
リソースの
spec.controller
フィールドはcitrix.com/ingress-controller
に設定されます 。 -
このリソースは、
ingressclass.kubernetes.io/is-default-class
アノテーションを使用してデフォルトクラスとして設定されます。詳細については、 Kubernetes のドキュメントを参照してください。
-
-
-
注記:
注釈と
spec.ingressClassName
の両方が定義されている場合、注釈はspec.ingressClassName
の前に一致します。注釈が一致しない場合、spec.ingressClassName
フィールドの照合操作は実行されません。Helmチャートを使用してNetScaler Ingressコントローラーをインストールする場合、
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
を指定します。この機能は、NetScaler VPXまたはMPXを管理するためのスタンドアロンポッドとして展開されたNetScaler Ingress Controllerでのみサポートされます。サイドカーとして展開されたCitrix ADC CPXでは、この機能はサポートされていません。
--update-ingress-status yes
コマンドライン引数が有効になっている YAML の例を次に示します。
args:
- --feature-node-watch false
- --ipam citrix-ipam-controller
- --update-ingress-status yes
imagePullPolicy: Always
<!--NeedCopy-->
サイドカーデプロイメントの Ingress ステータスの更新
Kubernetes では、Ingress を複数のアプリケーションを外部に公開するための単一のエントリポイントとして使用できます。Ingress には Address
(Status.LoadBalancer.IP
) フィールドがあり、イングレスが正常に作成された後に更新されます。このフィールドは、Kubernetes アプリケーションに到達できるパブリック IP アドレスまたはホスト名で更新されます。クラウドデプロイメントでは、このフィールドにはクラウドロードバランサーの IP アドレスまたはホスト名を指定することもできます。
クラウド展開では、NetScaler CPXとIngressコントローラーがtype LoadBalancer
のサービスを使用して公開され、そのサービスがクラウドロードバランサーを作成します。クラウドロードバランサーは、入力コントローラーとともにCitrix ADC CPXを公開します。そのため、NetScaler CPXで公開されるIngressリソースは、クラウドロードバランサーのパブリックIPアドレスまたはホスト名を使用して更新する必要があります。
これは、オンプレミス展開でも適用できます。NetScaler CPXがサービスタイプLoadBalancer
としてティア1のCitrix ADC VPXイングレスに公開されるデュアルティアイングレス展開では、NetScaler CPXによって操作されるイングレスリソースはVIPアドレスで更新されます。
このトピックでは、NetScaler Ingress Controllerをサイドカー展開としてNetScaler CPXのイングレスステータス更新を有効にする方法について説明します。
注:サイドカー機能のイングレスステータス更新は、 タイプLoadBalancer
のサービスでのみサポートされます。
入力ステータスの更新後の Ingress 出力の例
入力ステータスの更新後の Ingress 出力の例を次に示します。
$ kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
sample-ingress sample.citrix.com sample.abc.somexampledomain.com 80 1d
サイドカーデプロイメントの Ingress ステータス更新を有効にする
NetScaler CPX YAML ファイルで次の引数を指定すると、サイドカー展開のイングレスステータス更新機能を有効にできます。NetScaler Ingress Controllerを搭載したNetScaler CPXのデプロイメントYAMLファイル内のNetScaler CPXのargs
セクションに引数を追加する必要があります。
args:
- --cpx-service <namespace>/<name-of-the-type-load-balancer-service-exposing-cpx>
次の表に、イングレス更新の引数の詳細を示します。
キーワード/変数 | 説明 |
---|---|
--cpx-service |
この機能を有効にする引数を指定します。 |
<namespace>/<name-of-the-type-load-balancer-service-exposing-cpx> |
引数の値を指定する形式を指定します。 |
<namespace> |
サービスが作成される名前空間を指定します。 |
<name-of-the-type-load-balancer-service-exposing-cpx> |
NetScaler CPX を公開するサービスの名前を指定します。 |
注記:
サイドカー機能の Ingress ステータス更新は、 タイプ
LoadBalancer
のサービスでのみサポートされます。--cpx-service default/some-cpx-service
引数に定義されているサービスは、type LoadBalancer
の Kubernetes サービスである必要があります 。