上云无忧 > 文档中心 > 腾讯云容器服务实战教程 - 在 TKE 上使用负载均衡直通 Pod
容器服务 TKE
腾讯云容器服务实战教程 - 在 TKE 上使用负载均衡直通 Pod

文档简介:
概述: Kubernetes 官方提供了 NodePort 类型的 Service,即给所有节点开通一个相同端口用于暴露该 Service。大多云上负载均衡 (Cloud Load Balancer,CLB) 类型 Service 的传统实现也都是基于 NodePort,即 CLB 后端绑定各节点的 NodePort,CLB 接收外界流量,转发到其中一个节点的 NodePort 上,再通过 Kubernetes 内部的负载均衡,使用 iptables 或 ipvs 转发到 Pod。示意图如下:
*此产品及展示信息均由腾讯云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

概述

Kubernetes 官方提供了 NodePort 类型的 Service,即给所有节点开通一个相同端口用于暴露该 Service。大多云上负载均衡 (Cloud Load Balancer,CLB) 类型 Service 的传统实现也都是基于 NodePort,即 CLB 后端绑定各节点的 NodePort,CLB 接收外界流量,转发到其中一个节点的 NodePort 上,再通过 Kubernetes 内部的负载均衡,使用 iptables 或 ipvs 转发到 Pod。示意图如下:

腾讯云容器服务 TKE 默认的 CLB 类型 Service 以及默认的 Ingress 实现方式与上述方法相同。然而,TKE 目前还支持 CLB 直通 Pod 的方式,即 CLB 后端直接绑定 Pod IP + Port,不绑定节点的 NodePort。示意图如下:

实现方式分析

传统 NodePort 方式问题分析

通常会使用 CLB 直接绑定 NodePort 此方式来创建云上 Ingress 或 LB 类型的 Service,但此传统 NodePort 实现方式会存在以下问题:
流量从 CLB 转发到 NodePort 后还需进行 SNAT 再转发到 Pod,造成额外的性能损耗。
如果流量过于集中到某几个 NodePort 时(例如,使用 nodeSelector 部署网关到固定几台节点上),可能导致源端口耗尽或 conntrack 插入冲突。
NodePort 本身也充当负载均衡器,CLB 绑定过多节点 NodePort 时可能导致负载均衡状态过于分散,导致全局负载不均。

CLB 直通 Pod 方式优势

使用 CLB 直通 Pod 的方式不但不会存在传统 NodePort 方式的问题,还具备以下优势:
由于没有 SNAT,获取源 IP 不再需要 externalTrafficPolicy: Local
实现会话保持更简单,仅需让 CLB 开启会话保持即可,不需要设置 Service 的 sessionAffinity

操作场景

使用 CLB 直通 Pod 通常有如下场景:
需在四层获取客户端真实源 IP,但不期望使用 externalTrafficPolicy: Local 的方式。
需进一步提升网络性能。
需会话保持更容易。
解决全局连接调度的负载不均。

前提条件

Kubernetes 集群版本需高于1.12。CLB 直接绑定 Pod 时检查 Pod 是否 Ready,需查看 Pod 是否 Running、是否通过 readinessProbe,及是否通过 CLB 对 Pod 的健康监测,此项依赖于 ReadinessGate 特性,该特性在 Kubernetes 1.12 开始支持。

操作步骤

请参见 使用 LoadBalancer 直连 Pod 模式 Service

参考资料

TKE 基于弹性网卡直连 Pod 的网络负载均衡
集群开启 VPC-CNI 模式网络
VPC-CNI 网络模式使用指引
相似文档
  • 应用场景: 当需明确服务请求来源以满足业务需求时,则需后端服务能够准确获取请求客户端的真实源 IP。例如以下场景: 具有对服务请求的来源进行审计的需求,例如异地登录告警。 具有针对安全攻击或安全事件溯源的需求,例如 APT 攻击及 DDoS 攻击等。
  • 操作场景 Traefik 是一款优秀的反向代理工具,与 Nginx 相比,Traefik 具有以下优势: 原生支持动态配置。例如,Kubernetes 的 Ingress 资源或 IngressRoute 等 CRD 资源(Nginx 每次需重新加载完整配置,部分情况下可能会影响连接)。
  • 操作场景: 腾讯云 Kubernetes 集群实现蓝绿发布或灰度发布通常需向集群额外部署其他开源工具,例如 Nginx Ingress、Traefik 或将业务部署至服务网格 Service Mesh,利用服务网格的能力实现。这些方案均具有一定难度,若您的蓝绿发布或灰度需求不复杂,且不期望集群引入过多的组件或复杂的用法,则可参考本文利用 Kubernetes 原生的特性以及腾讯云容器服务 TKE 标准集群和 TKE Serverless 集群自带的 LB 插件实现简单的蓝绿发布和灰度发布。
  • 本文将介绍使用 Nginx Ingress 实现金丝雀发布的使用场景、用法详解及实践。 说明: 使用 Nginx Ingress 实现金丝雀发布的集群,需部署 Nginx Ingress 作为 Ingress Controller,并且对外暴露统一的流量入口。详情请参见 在 TKE 上部署 Nginx Ingress。
  • 容器服务 TKE 通过集成日志服务 CLS,提供了全套完整的产品化能力,实现 Nginx-ingress 日志采集、消费能力。更多请查看 Nginx-ingress 日志配置。若默认的日志索引不符合您的日志需求,您可以自定义日志索引,本文向您介绍如何更新 Nginx Ingress 的日志索引。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部