在启用了 HttpLoadBalancing 插件的情况下使用自定义 Ingress 控制器
您可以通过停用 HttpLoadBalancing 插件来运行自定义 Ingress 控制器,例如 nginx-ingress。这可以防止 GKE Ingress 控制器处理 Ingress 资源。
如果您想运行启用了 HttpLoadBalancing 插件的自定义 Ingress 控制器,例如使用子集和 Private Service Connect 等功能,您可以使用以下方法之一:
在 Ingress 清单中,设置 kubernetes.io/ingress.class 注释。运行所有 GKE 版本的集群都支持此配置。
配置 ingressClassName 字段。
配置默认 Ingress 类
您必须确保 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
注意:如果 Ingress 具有空的 spec.ingressClassName 或 spec.ingressClassName 不存在,并且 Ingress 没有注释 kubernetes.io/ingress.class,则 GKE Ingress 控制器会处理 Ingress。
此配置适用于 GKE 1.18 至 1.21 版中的 Ingress v1beta1 API 以及 GKE 1.19 及更高版本中的 Ingress v1 API。
配置默认 Ingress 类
如需为集群中的所有 Ingress 资源配置默认 Ingress 类,您可以创建 IngressClass 资源,并将注释 ingressclass.kubernetes.io/is-default-class 设置为 true:
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
注意:准入控制器填充集群中新 Ingress 资源的 spec.ingressClassName 字段,但不会修改现有 Ingress 资源。
此配置适用于运行 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 |
设置为 gce 或 gce-internal 以外的值 |
任意值 | 不处理 Ingress |
未设置 | 任意值 | 不处理 Ingress |
对于运行旧版 GKE 的集群,GKE 控制器会处理任何没有注释 kubernetes.io/ingress.class 或具有值为 gce 或 gce-internal 的注释的 Ingress。
请登录之后再进行评论