本页面介绍如何将自定义 Ingress 控制器与 Google Kubernetes Engine (GKE) 搭配使用。
在启用了 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
此配置适用于 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 控制器行为。
后续步骤
- 详细了解 Google Cloud 中的负载均衡。
- 了解如何配置适用于内部应用负载均衡器的 Ingress。
- 了解如何配置适用于外部应用负载均衡器的 Ingress。
- 使用 NGNIX Ingress 实现 GKE Ingress。