Kubernetes 容器网络模型和典型实现( 三 )


Kubernetes 容器网络模型和典型实现
本文插图
值得一提是 , 容器 CIDR 和下一跳主机 IP 的映射条目容量没有特殊限制 。 在阿里云 ACK 产品上该条目容量需要在 VPC/vSwitch 控制面中进行分发 , 考虑到整体性能因素 , 在数量上做了一定数量限制(缺省 48 个) 。 但在自建主机网络部署中 , 该数量限制就不会明显了 , 因为主机下一跳主机网络在一个大二层平面上 。
Flannel 新版本 backend 不建议采用 UDP 封装方式 , 因为 traffic 存在 3 次用户空间与内核空间的数据拷贝 , (如下图)性能上存在比较大的损耗 。 新版本推荐用 VxLan 和云服务商版本的 backends 进行优化 。
Kubernetes 容器网络模型和典型实现
本文插图
L3 networking: Calico
Calico 是 L3 Routing 上非常流行容器网络架构方案 。 主要组件是 Felix , BIRD 和 BGP Route Reflector 。 Felix 和 BIRD 均是运行在 Node 上的 deamon 程序 。 架构简要:
Kubernetes 容器网络模型和典型实现
本文插图
Felix 完成网卡的管理和配置 , 包括 Routes programming 和 ACLs 。 实现路由信息对 Linux kernel FIB 的操作和 ACLs 的管理操作 。 由于 Felix 功能完整性和运行独立性非常好 , 其功能作为 Off-the-shelf 被集成到阿里云 Terway 网络插件中 , 实现其网络策略功能 。
BIRD(BGP client)完成内核路由 FIB 条目向集群网络侧分发 , 使其路由条目对所有网络节点中可见 , 并实现 BGP 路由协议功能 。 每一个 BGP client 会连接到网络中其它 BGP client , 这对规模较大的部署会是明显的瓶颈(due to the N^2 increase nature) 。 鉴于该限制引入了 BGP Route Reflector 组件 , 实现 BGP clients 路由信息在汇聚层上再进行分发(propagation) 。 在集群网站中 Reflector 组件可以部署多个 , 完全能于部署规模大小来决定 。 Reflector 组件仅仅执行路由信令和条目的分发 , 其中不涉及任何数据面流量 。 路由汇聚层分发:
Kubernetes 容器网络模型和典型实现
本文插图
L3 networking:Terway
Terway 是阿里云自研 CNI 插件 , 提供了阿里云 VPC 互通和方便对接阿里云产品的基础设施 , 没有 overlay 网络带来的性能损耗 , 同时提供了简单易用的 backend 功能 。
Terway 功能上可分为三部分:1. CNI 插件 , 一个独立的 binary 运行程序;2. Backend Server(也称为daemon) , 程序以独立 daemonSet 方式运行在每个 Node 上;3. Network Policy , 完全集成了 Calico Felix 实现 。
CNI 插件 binary 是通过 daemonSet 部署中 initContainer 安装到所有节点上 , 实现了ADD、DEL、CHECK三个接口供 kubelet 调用 。 这里以一个 Pod 在创建过程中的网络 setup 步骤来说明: