カスタム Ingress コントローラの使用


このページでは、Google Kubernetes Engine(GKE)でカスタム Ingress コントローラを使用する方法について説明します。

HttpLoadBalancing アドオンを有効にしたカスタム Ingress コントローラを使用する

HttpLoadBalancing アドオンを無効にすると、nginx-ingress などのカスタム Ingress コントローラを実行できます。これにより、GKE Ingress コントローラにより Ingress リソースが処理されなくなります。

HttpLoadBalancing アドオンを有効にしたカスタム Ingress コントローラを実行する場合、サブセット化Private Service Connect などの機能を利用するには、次のいずれかの方法を使用できます。

プロセスによって spec.ingressClassName が誤って上書きされないようにする必要があります。spec.IngressClassName を有効値から空の文字列("")に変更する更新オペレーションによって、GKE Ingress コントローラで Ingress が処理されます。

ingressClassName フィールドを構成する

Ingress マニフェストで ingressClassName フィールドを設定することで、カスタム Ingress コントローラを使用できます。次のマニフェストでは、nginx Ingress コントローラを指定する Ingress が記述されています。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
 name: cafe-ingress
spec:
 ingressClassName: nginx
 tls:
 - hosts:
   - cafe.example.com
   secretName: cafe-secret
 rules:
 - host: cafe.example.com

この構成は、GKE バージョン 1.18~1.21 の Ingress v1beta1 API と GKE バージョン 1.19 以降の Ingress v1 API でサポートされています。

デフォルトの Ingress クラスを構成する

アノテーション ingressclass.kubernetes.io/is-default-classtrue に設定して IngressClass リソースを作成すると、クラスタ内のすべての Ingress リソースにデフォルトの Ingress クラスを構成できます。

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: nginx-public
annotations:
  ingressclass.kubernetes.io/is-default-class: "true"
spec:
controller: k8s.io/ingress-nginx

この構成は、GKE バージョン 1.19 以降を実行しているクラスタで使用できます。

GKE Ingress コントローラの動作の概要

GKE バージョン 1.18 以降を実行しているクラスタの場合、GKE Ingress コントローラで Ingress が処理されるかどうかは、Ingress マニフェストの kubernetes.io/ingress.class アノテーションと ingressClassName フィールドの値によって決まります。

kubernetes.io/ingress.class ingressClassName Ingress コントローラの動作
未設定 未設定 Ingress を処理する
gce または gce-internal 任意の値 Ingress を処理する
gcegce-internal 以外の値に設定する 任意の値 Ingress を処理しない
未設定 任意の値 Ingress を処理しない

古いバージョンの GKE を実行しているクラスタの場合、GKE コントローラは、kubernetes.io/ingress.class アノテーションがないか、値が gce または gce-internal のアノテーションがある Ingress を処理します。

次のステップ