Service 提供了基于四层网络的集群内容器服务的暴露能力,Service 暴露类型(例如 ClusterIP、NodePort 或 LoadBalancer)均基于四层网络服务的访问入口,缺少基于七层网络的负载均衡、SSL 或基于名称的虚拟主机等七层网络能力。Ingress 提供七层网络下 HTTP、 HTTPS 协议服务的暴露,及七层网络下的常见能力。
Ingress 基本概念
Ingress 是允许访问到集群内 Service 规则的集合,您可以通过配置转发规则,实现不同 URL 可以访问到集群内不同的 Service。为了使 Ingress 资源正常工作,集群需运行 Ingress Controller,容器服务在集群内默认启用了基于腾讯云负载均衡器实现的 TKE Ingress Controller。
Ingress 生命周期管理
Ingress 对外服务的能力依赖于负载均衡所提供的资源,因此服务资源管理也是 Ingress 的重要工作之一。Ingress 在资源的生命周期管理上会使用以下标签:
标签 | 描述 |
tke-createdBy-flag = yes | 标识该资源是容器服务创建,拥有该标签的 Ingress 会在销毁时删除对应资源。 如果没有该标签,Ingress 会在销毁时,仅删除负载均衡内的监听器资源,而不删除负载均衡自身。 |
tke-clusterId = <clusterId> | 标识该资源被哪一个 Cluster 所使用。 Ingress 会在销毁时,删除对应标签(ClusterId 需正确)。 |
tke-lb-ingress-uuid = <Ingress UUID> | 标识该资源被哪一个 Ingress 所使用。 Ingress 目前不支持复用,当用户指定 Ingress 使用已有负载均衡时,标签的值若不正确会被拒绝。 Ingress 会在销毁时,删除对应标签(Ingress UUID 需正确)。 |
说明:
上述标签对用户只读,请不要修改或删除上述标签,否则可能导致资源泄漏。
若用户使用了已有负载均衡,则 Service 仅会使用该负载均衡,而不会删除该负载均衡。
Ingress Controller 使用方法
除了腾讯云服务提供的 TKE Ingress Controller 以外,Kubernetes 社区还有各种类型的第三方 Ingress Controller,这些 Ingress 控制器均为完成服务的七层网络暴露。Kubernetes 社区基本支持使用 kubernetes.io/ingress.class 注解用于区分各种 Ingress 控制器,以确定当前 Ingress 资源应被哪一个控制器处理。TKE Ingress Controller 也支持使用该注解,具体规则及使用建议如下:
当 Ingress 资源没有描述注解
kubernetes.io/ingress.class
时,TKE Ingress Controller 会管理当前 Ingress 资源。当 Ingress 资源有注解
kubernetes.io/ingress.class
且值为 qcloud
时,TKE Ingress Controller 会管理当前 Ingress 资源。当 Ingress 资源修改注解
kubernetes.io/ingress.class
的内容时,TKE Ingress Controller 会根据注解内容将其纳入或脱离管理范围,其操作会涉及到资源的创建与释放。当您确认完全不需要使用 TKE Ingress Controller 时,可以将集群中的 Deployment(kube-system:l7-lb-controller)的工作副本数量调整为0,从而关闭 TKE Ingress Controller 功能。
说明:
关闭该功能前,请确保集群中没有被 TKE Ingress Controller 管理的 Ingress 资源,避免出现负载均衡资源释放失败的情况。
若用户在负载均衡上面开启了删除保护,或者使用私有连接,则删除 Service 时,不会删除该负载均衡。
Ingress 注意事项
请勿在负载均衡控制台手动删除 Ingress 所关联的 CLB 实例,也不能手动修改 CLB 的配置,CLB 相关操作都应在 TKE 侧进行。
Ingress 相关操作
Ingress 相关操作及功能如下,您可参考以下文档进一步了解: