使用自定义 Ingress 控制器


本页面介绍如何将自定义 Ingress 控制器与 Google Kubernetes Engine (GKE) 搭配使用。

在启用了 HttpLoadBalancing 插件的情况下使用自定义 Ingress 控制器

您可以通过停用 HttpLoadBalancing 插件来运行自定义 Ingress 控制器,例如 nginx-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 类

如需为集群中的所有 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

此配置适用于运行 GKE 1.19 及更高版本的集群。

GKE Ingress 控制器行为摘要

对于运行 GKE 1.18 及更高版本的集群,GKE Ingress 控制器是否处理 Ingress 取决于 Ingress 清单中 kubernetes.io/ingress.class 注解和 ingressClassName 字段的值。如需了解详情,请参阅 GKE Ingress 控制器行为

后续步骤