容器服务 Service 使用已有 CLB

腾讯云容器服务 TKE 具备通过 service.kubernetes.io/tke-existed-lbid: 注解实现使用已有负载均衡的功能,可以使用该注解指定集群 Service 资源关联的负载均衡实例。还提供了 Service 负载均衡复用功能,即指定多个 Service 使用同一个已有负载均衡,可以参考这篇进行设置。

相关产品
容器服务 产品页,含版本规格、价格与购买入口。

一、使用已有负载均衡的同步行为

·使用已有负载均衡时,指定 Service 的网络类型的注解不生效。

·当 Service 不再使用已有负载均衡时,该 Service 描述的对应监听器会删除,该负载均衡将保留。
删除监听器时,会校验监听器名称是否被修改。如果用户修改监听器名称,则认为该监听器可能由用户创建,不进行主动删除。

·如果 Service 目前正在使用自动创建的负载均衡,那么给它添加使用已有负载均衡的注解,会使得当前负载均衡的生命周期结束并释放,Service 的配置将会与该负载均衡进行同步。反之,如果删除 Service 正在使用的已有负载均衡的注解,Service Controller 组件将会为该 Service 创建负载均衡并进行同步。

二、使用已有负载均衡同步腾讯云标签行为

·默认情况下,Service 创建的 CLB 均会配置 tke-createdBy-flag = yes 标签,Service 会在销毁时删除对应资源。若使用已有 CLB,则不会配置该标签,Service 销毁时也不会删除对应资源。

·所有 Service 均会配置 tke-clusterId = 标签,若 ClusterID 正确,则 Service 会在销毁时删除对应标签。

·于2020年8月17日起创建的集群,将默认关闭多个 Service 复用相同 CLB 的功能。该日期前后集群内 Service 创建的 CLB 标签配置规则变更情况及详细信息,请参见 多 Service 复用 CLB。

三、注意事项

·指定使用的负载均衡需和集群处于同一 VPC。

·请确保你的容器业务不和云服务器 CVM 业务共用一个负载均衡。

·不支持你在负载均衡控制台操作 TKE 所管理负载均衡的监听器和后端绑定的服务器,你的更改会被 TKE 的自动同步所覆盖。

·使用已有的负载均衡时:

·Service Controller 将不负责该已有负载均衡的释放与回收。

·仅支持使用通过负载均衡控制台创建的负载均衡器,不支持复用由 TKE 自动创建的负载均衡,会破坏其他 Service 负载均衡的生命周期管理(例如,可能导致复用的 Service 被删除后,CLB 也随之删除)。

·复用负载均衡时:

·不支持跨集群复用负载均衡。

·你需要使用复用功能时,建议有明确的监听器端口管理,否则负载均衡在多个 Service 的使用下,会出现管理混乱。

·复用负载均衡的端口冲突时,将会被拒绝。如果在修改中出现冲突,那么出现冲突的监听器后端同步无法确保正确。

·复用负载均衡的 Service 不支持开启 Local 访问(传统型负载均衡限制)。

·删除 Service,则复用负载均衡绑定的后端云服务器需要自行解绑,同时会保留一个 tag tke-clusterId: cls-xxxx,需自行清理。

四、Service 示例

apiVersion: v1kind: Servicemetadata: annotations: service.kubernetes.io/tke-existed-lbid: lb-6swtxxxx # lb-6swtxxxx 是已有负载均衡示例的ID name: nginx-servicespec: ports: – name: 80-80-no port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: LoadBalancer

五、使用包年包月的负载均衡对外提供服务

Service Controller 组件管理负载均衡生命周期时,仅支持购买按量计费的负载均衡资源。当用户需要长时间使用负载均衡时,包年包月计费模式在价格上有一定的优势。在此类场景下,用户就可以独立购买和管理负载均衡,再通过注解控制 Service 使用已有负载均衡,并将负载均衡的生命周期管理从 Service Controller 组件中剥离。

六、在同一端口暴露 TCP 和 UDP 服务

Kubernetes 在 Service 的设计中具有限制:一个 Service 下暴露的多个端口协议必须相同。有许多游戏场景下的用户,有在同一个端口同时暴露 TCP 和 UDP 服务的需求,腾讯云负载均衡服务支持在同一个端口上同时监听 UDP 和 TCP 协议,此需求可以通过 Service 负载均衡复用来解决。
例如以下 Service 配置,game-service 被描述为两个 Service 资源,描述的内容除了监听的协议以外基本相同。两个 Service 都通过注解指定使用已有负载均衡 lb-6swtxxxx。通过 kubectl 将以上资源应用到集群中,就可以实现在同一个负载均衡的端口上暴露多种协议的目的。

apiVersion: v1kind: Servicemetadata: annotations: service.kubernetes.io/tke-existed-lbid: lb-6swtxxxx # lb-6swtxxxx 是已有负载均衡示例的ID name: game-service-aspec: ports: – name: 80-80-tcp port: 80 protocol: TCP targetPort: 80 selector: app: game type: LoadBalancer—apiVersion: v1kind: Servicemetadata: annotations: service.kubernetes.io/tke-existed-lbid: lb-6swtxxxx # lb-6swtxxxx 是已有负载均衡示例的ID name: game-service-bspec: ports: – name: 80-80-udp port: 80 protocol: UDP targetPort: 80 selector: app: game type: LoadBalancer

赞 (0)
上一篇 4天前
下一篇 4天前