腾讯云容器服务 TKE 集成 Kubernetes 网络、腾讯云 VPC 以及 CLB 等各种云服务能力,提供高效稳定的容器网络。本文主要介绍 TKE 提供的 CNI 能力,您可以通过了解这些 CNI 网络方案,更合理地为您的应用选择合适的 CNI 网络插件。
容器网络 CNI
CNI (Container Network Interface) 网络插件是一种用于 Kubernetes 集群的网络解决方案,旨在提供灵活、可扩展和高性能的网络连接。CNI TKE 网络插件遵循 CNI 规范,允许 Kubernetes 集群与各种网络解决方案无缝集成,以满足不同的业务需求和性能要求。
网络插件需满足的以下约束:
每个 Pod 都有独立的 IP 地址,节点上的 Pod 可以不通过 NAT 和集群内的所有 Pod 通信。
节点上的代理服务(例如 Kubelet)可以和本节点上的所有 Pod 通信。
TKE 提供了3种网络 CNI 插件方案:VPC-CNI、Global Router 和 Cilium-Overlay,下文会详细介绍这三种网络方案。
VPC-CNI 网络方案介绍
VPC-CNI 是基于腾讯云 VPC 专有网络实现的容器网络 CNI 插件,可以将 VPC 的弹性网卡直接分配给 Pod,实现 Pod 之间的互联互通。这种方案充分复用 VPC 的云上网络资源,容器与节点分布在同一网络平面,Pod IP 为集群 IPAMD 组件分配的弹性网卡 IP,由于不需要经过节点上的网桥设备,不需要使用 VxLAN 等隧道技术封装报文,在网络性能、可观测性、限流、隔离等多层面都提供更好的支持,更加适合公有云场景。
TKE 推荐将 VPC-CNI 作为集群默认的网络方案。VPC-CNI 模式提供共享网卡和独占网卡两种模式,各自适用于不同的场景,您可以根据业务需求选择不同的网络模式。
共享网卡模式:多个 Pod 共享一张弹性网卡,IPAMD 组件为弹性网卡申请多个 IP 并绑定到不同的 Pod,此模式可以降低对弹性网卡资源的需求,并提升节点上 Pod 的部署密度。共享网卡模式可支持 固定 Pod IP 能力。详情请参见 多 Pod 共享网卡模式。
独立网卡模式:每个 Pod 会绑定独立的弹性网卡,此模式适合对网络性能有较高需求(高吞吐低延迟)的场景。但是会受机型影响,不同节点可使用的弹性网卡数量有限,单节点 Pod 密度更低。详情请参见 Pod 独占网卡模式。
VPC-CNI 方案的基本原理图如下所示:
优势特性
容器网络和 VPC 子网处于同一网络平面,可以使用 VPC 相应的云上网络的能力,例如 EIP 和安全组等。
无需按节点预分配 CIDR 地址段,避免浪费 CIDR 内的 IP 地址。
数据面转发无需网桥,网络转发性能更高,大约提升10%,适用于对网络性能要求较高的场景。
支持 Pod 固定 IP,适用于依赖容器固定 IP 的场景。
适用场景
时延敏感型:
中间件与微服务:较低的网络延迟,可以提升大规模中间件以及微服务部署的网络性能。
在线游戏、视频直播类应用:较高的网络吞吐和较低的网络延迟,同时可以使用 VPC 的云上网络资源,能够更好地支持网络密集型业务。
传统架构迁移:传统架构迁移到容器平台需要保证 IP 不变及针对 IP 做安全策略限制。
需要为容器单独绑定独立的安全组策略,使用独立网卡模式绑定安全组。
注意事项
Pod 需要从 VPC 子网中分配 IP,建议该子网独立分配给 Pod 使用,不要与其他云上资源共用(如云服务器、负载均衡等)。
集群内的节点需要和容器子网处于相同可用区。
节点上可调度的Pod 数量受限于节点所支持弹性网卡能绑定 IP 的最大数量和弹性网卡数量。配置越高的机器可支持的弹性网卡数量越多,具体数量可以查看节点的 Allocatable 配置。
Global Router 网络方案介绍
Global Router 方案原理
Global Router 网络方案是 TKE 基于腾讯云网络全局路由能力实现的容器网络 CNI。集群会为每个节点分配一个 Pod CIDR,用于给该节点上的 Pod 分配 IP 地址,Pod CIDR 独立于 VPC CIDR,每个节点上的 Pod 具有独立且不重叠的 IP 地址。不同节点的 Pod CIDR 信息会通过全局路由方式下发到 VPC,实现跨节点 Pod 的互访。
该网络模式特征包含以下几点:
容器 Pod CIDR 段不占用 VPC CIDR 段,并且会预分配给节点,容器 IP 从节点预分配的 Pod CIDR 网段中获取。
容器路由会直接发布给 VPC,跨节点 Pod 之间互访直接通过全局路由转发。
无需使用 VxLan 封装报文。
Global Router 方案的基本原理图如下所示:
容器 IP 分配机制
集群的每一个节点会根据设置的集群 Pod CIDR ,以及“单节点 Pod 数量上限”计算出每个节点需要分配的 Pod CIDR 网段,用于该节点下 Pod 的 IP 地址分配。
集群的 Service 网段会根据用户设置的“集群内Service数量上限”选用集群 Pod CIDR 中最后一段CIDR 地址用于 Service 的 IP 地址分配。
节点释放后,该节点使用的容器 Pod CIDR 网段也会释放回 IP 段池。
扩容节点按顺序循环选择容器 Pod CIDR 大段中可用的 IP 网段。
优势特性以及适用场景
使用简单,Pod 启动速度较快。
适合规模相对固定,对于 IP 分配和网络性能没有特殊需求的简单业务场景。
注意事项
集群 VPC CIDR 和集群 Pod CIDR 网段不能重叠。
同一 VPC 内,不同集群的 Pod CIDR 网段不能重叠。
容器网络和 VPC 路由重叠时,优先在容器网络内转发。
不支持固定 Pod IP。
Cilium-Overlay 网络方案介绍
注意:
由于 Cilium-Overlay 网络方案仅支持注册节点场景,当前不支持只存在云上节点场景,只有云上节点的情况请使用推荐的 VPC-CNI 网络方案。
Cilium-Overlay 网络方案是容器服务 TKE 基于 Cilium VXLan 实现的容器网络插件,实现分布式云场景中,用户云下节点添加到 TKE 集群时,云上云下 Pod 之间互通的需求。该网络模式特征如下:
云上节点和云下节点共用指定的容器网段。
容器网段分配灵活,容器 IP 段不占用 VPC 的其他网段。
使用 Cilium VXLan 隧道封装协议构建 Overlay 网络。
云上 VPC 网络和注册节点 IDC 网络通过云联网互通后,跨节点 Pod 访问原理如下图所示:
使用限制
使用 Cilium VXLan 隧道封装协议,有10%以内的性能损耗。
Pod IP 在集群外不能直接访问。
需从指定子网获取2个 IP 创建内网负载均衡,满足 IDC 中第三方节点访问 APIServer 和云上公共服务。
集群网络和容器网络网段不能重叠。
不支持固定 Pod IP。