好未来技术团队出品, 专注于容器底层基础设施建设
背景介绍
构建一个大型混合云容器网络,首先需要考虑的是性能问题,还有容器网络架构是不是经过大规模验证,云厂商是不是有类似方案的选择,如何设计一个能支撑 5K 节点的容器网络呢?其实经过大规模验证的容器网络组件屈指可数,其中大名鼎鼎的 cilium 公开数据显示支持过单集群 5k node 规模,各大云厂商齐头并进支持 cilium ebpf。
本文将包括如下几部分:
- Kubernetes Pod 网络概览
- Kubernetes Service 网络概览
- 构建一个大型容器网络
阅读本文你将了解到我司容器网络的进化路线,从容器小集群成长为大集群的新一代容器网络架构;您还将发现老容器集群潜在的网络架构缺陷,除旧迎新恒久不变,一代更比一代强。
『深入容器』系列文章第一篇,请收藏与关注系列文章,欢迎加入我们。
1、Kubernetes Pod 网络概览
在使用 Kubernetes 编排应用时,您必须改变对应用和其主机的网络的思维方式。使用 Kubernetes 时,您需要考虑的是 Pod、Service 和外部客户端的通信方式,而不是主机或虚拟机的连接方式。
Kubernetes 的高级软件定义网络 (SDN) 支持在同一区域级集群中的不同地区之间路由和转发 Pod、Service、Node 的数据包。
IP 地址相关的术语
Kubernetes 网络模型在很大程度上依赖于 IP 地址。Service、Pod、容器和 Node 使用 IP 地址和端口进行通信。Kubernetes 提供不同类型的负载均衡,用于将流量定向到正确的 Pod。
相关术语:
- ClusterIP:分配给 Service 的 IP 地址,此地址会在 Service 的生命周期内保持不变
- Pod IP:分配给 Pod 的 IP 地址,大部分情况生命周期随 Pod 的销毁而终止
- Node IP:分配给节点的 IP 地址
几种经典容器网络模式
隧道封包模式: VxLan/IPIP/GRE ,通过tunnel隧道封包建立overlay 网络,实现Pod到Pod的通信。
路由模式:通过映射目标容器网段和主机IP的关系,Pod 之间的通信数据包通过路由表转发到相应节点上。
2、Kubernetes Service 网络概览
Kubernetes 的 Service 到底是个啥 ?其实 Kubernetes 的 Service 主要解决的是 Pod IP 短生命周期带来的问题,Service clutserIP 就是 node side Loadbalancer。
需要思考的问题:
- 当一个应用拥有多个 Pod 时如何去做负载均衡
- 会话保持如何去处理
- 某个容器销毁后短生命周期的 IP 变更如何去处理
下图显示了 Service 负载均衡的不同实现性能对比(数据来源于阿里云容器团队)