腾讯云TKE-基于 Cilium 统一混合云容器网络(下) (2)

同一个接入层交换机下通信链路:10.2.0.2节点与10.2.0.3节点处在同一个接入层交换机下,具备二层连通,报文经过封装后不经过三层转发直接被送到对端。

不同接入层交换机之间通信链路:10.2.0.2节点与10.3.0.3节点处在不同的接入层交换机下,报文需要经过接入层交换机和核心交换机路由后才能到达对端。

腾讯云TKE-基于 Cilium 统一混合云容器网络(下)

BMP 监控

基于 BGP Monitoring Protocol 开发 BMP Server,用于对 BGP 会话的运行状态进行实时监控,包括对等体关系的建立与关闭、路由信息等。利用收集到的BMP Message直接定位故障。

腾讯云TKE-基于 Cilium 统一混合云容器网络(下)

优雅重启

BGP 是基于 TCP 实现的路由协议,TCP 连接异常断开后,开启 Graceful Restart 功能的交换机不会删除 RIB 和 FIB,仍然按照原有的转发表项转发报文,并启动 RIB 路由老化定时器。BGP Peer 需要两端同时开启 Graceful Restart 功能才能生效,Graceful Restart可以有效防止BGP链路震荡,提升底层网络的可用性。

自定义 IPAM

在 Kubernetes 常见配置中,会通过 kube-controller-manager 的 allocate-node-cidrs 和 configure-cloud-routes 等参数来为节点分配 PodCIDR 并配置路由。然而,社区的这种方案限制了节点只能有一段 PodCIDR,并且不能动态扩充。这种一个节点一个 PodCIDR 的策略太简单,导致 IP 资源利用率太低,某些节点规格小可能用不完,某些节点规格大却不够。

在混合云场景下,我们发现客户对于 IPAM 提出了更高的要求:

希望节点的 PodCIDR 可以是多段的

希望节点的 PodCIDR 可以支持按需动态扩充和回收

为了解决这个问题,我们使用了自己的 tke-ipamd 组件来实现自定义的 IPAM 功能,原理如下图所示:

腾讯云TKE-基于 Cilium 统一混合云容器网络(下)

不再由 kube-controller-manager 组件来分配节点 PodCIDR,而是由 tke-ipamd 组件统一给节点分配 PodCIDR

Cilium Agent 通过 CiliumNode 对象读取 tke-ipamd 分配的 PodCIDR,响应 CNI 请求给 Pod 分配 IP

tke-ipamd 通过 list-watch 机制监听节点 IP 资源使用情况,当节点 IP 资源使用率过高时动态扩充节点的 PodCIDR

性能测试

为了对 TKE 混合云 Underlay 容器网络的性能有更好的了解,我们使用 netperf 工具对其进行了性能测试,可以看到,Underlay 在网络吞吐和带宽上基本没有性能损耗。

腾讯云TKE-基于 Cilium 统一混合云容器网络(下)

腾讯云TKE-基于 Cilium 统一混合云容器网络(下)

总结与展望

在介绍了混合云场景下,TKE 基于 Cilium 的混合云容器网络的互联方案和 Overlay 网络方案后,本文重点介绍了基于 BGP 路由的 Underlay 网络方案。TKE 混合云 Underlay 容器网络方案利用了 BGP 的扩展性,能够满足大规模集群横向扩展的需求,同时也能在性能上相对于节点网络做到基本无损,为客户提供更高的数据面转发性能。此网络方案在 TKE 公有云上线前,已经过腾讯云专有云敏捷 PaaS 平台 TCNS 私有化环境的大规模实践,并在 腾讯云 TKEStack 中得到了集成和开源。

混合云与容器结合正在吸引越来越多企业客户的目光,其在资源扩容、多活备灾、业务分布式部署等场景可以提高企业现有计算资源利用率,给客户带来显著受益。腾讯云容器团队打通公有云与 IDC 环境差异,为客户提供统一管理视图,实现多云场景、IDC 场景以及边缘场景的统一。除了单集群能力的统一,腾讯云容器团队在集群注册、多集群管理、跨云跨集群互访等方面也有统一的方案,欢迎关注与体验。

参考资料

容器服务(Tencent Kubernetes Engine,TKE)是腾讯云提供的基于 Kubernetes,一站式云原生 PaaS 服务平台。为用户提供集成了容器集群调度、Helm 应用编排、Docker 镜像管理、Istio服务治理、自动化DevOps以及全套监控运维体系的企业级服务。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zypfyg.html