Kubernetes 容器网路绪论
首先我们会介绍下 Kubernetes 容器网路的基础概念,包括:
Pod 网络连通性(CNI)
如下所示是 Kubernetes Pod 网络示意图:
在我们争创 Pod 时:
Kubelet 会首先从 ApiServer 监听至 Pod 的争创,会争创 Pod 的沙箱;然后通过 CNI 接口读取 CNI 的插件去配置容器的网路;CNI 会配置 Pod 的网路空间,以及打通不同 Pod 之间的网路访问。如何打通的网路?
通常 Pod 跟宿主机网路不在一个平面,要怎么打通 Pod 之间通讯呢?一般实现 Pod 之间移动的方案有两种:
Kubernetes 网络负载均衡(Service)
为什么还要 Kubernetes Service?原因如下:
Kubernetes Service
构建高性能云原生的 CNI 网络哪些是云原生容器网路?
云上 IaaS 层网路虚拟化,在容器中再做一层网络虚拟化带给的功耗损失比较大。
云原生容器网路是直接使用云上原生云资源配置容器网路:
由于容器的网路直接成为了 VPC 中的一等公民,所以使用云原生容器网路会有很多优势:
如何运用云原生资源建立容器网路?
IaaS 层网路资源(以阿里云为例):
利用弹性网卡或则弹性网卡辅助 IP 分配给 Pod 来实现云原生容器网路:
对并行的 Pod 网络配置读取批量申请资源:
除此之外也有这些资源管理策略,例如:如何选择 Pod 要用的虚拟交换机,保证 IP 充裕?如何平衡每位节点上的网卡的队列跟中断数,保证争抢最少?
可参考 Terway 文档或代码:。
网络怎样打通
Pod 独占弹性网卡方式:
它的在CNI的实现方法是:
通过 Terway 资源管理将弹性网卡绑定 Pod 所在 Node;Terway CNI 将网卡直接移入至 Pod 网络空间;Terway CNI 为其网卡配置 IP 和路由等网路配置。
这种模式的特征跟优势是:
性能对比
如上图所示:
NetworkPolicy 性能跟扩展性问题
NetworkPolicy 是 Kubernetes 控制 Pod 和 Pod 间是否容许通讯的规则。目前主流的 NetworkPolicy 实现基于 iptables 实现,同样有 iptables 的扩展性问题: