概述

最近更新时间: 2024-10-17 17:10:00

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 时,不会删除该负载均衡。