《Kubernetes网络权威指南》读书笔记 | 打通CNI与Kubernetes:Kubernetes网络驱动

Posted COCOgsta

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Kubernetes网络权威指南》读书笔记 | 打通CNI与Kubernetes:Kubernetes网络驱动相关的知识,希望对你有一定的参考价值。

书籍来源:《Kubernetes网络权威指南:基础、原理与实践》

一边学习一边整理读书笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:《Kubernetes网络权威指南》读书笔记 | 汇总_COCOgsta的博客-CSDN博客


Kubernetes支持两种网络驱动,分别是Kubenet和CNI。

3.4.1 即将完成历史使命:Kubenet

Kubenet是Kubernetes早期原生的网络驱动,提供非常简单和基本的单机容器网络能力。

随着CNI的广泛使用,Kubenet正在被慢慢弃用。

3.4.2 网络生态第一步:CNI

CNI是容器网络的标准化,试图通过JSON描述一个容器网络配置。CNI的原理如图3-10所示。

图3-10 CNI的原理

从图3-10中可以看出,CNI是Kubernetes与底层网络插件之间的一个抽象层,为Kubernetes屏蔽了底层网络实现的复杂度,同时解耦了Kubernetes的具体网络插件实现。

CNI主要有两类接口:分别是在创建容器时调用的配置网络接口:

和删除容器时调用的清理网络接口:

不论是配置网络接口还是清理网络接口,都有两个入参,分别是网络配置和runtime配置。runtime配置主要是容器运行时传入的网络namespace信息。

安装CNI

下面举几个CNI网络插件的例子。

host-local&bridge插件

我们定义了一个名为mynet的网络。它是一个bridge模型,而IP地址管理(ipam)使用的是host-local,且可供分配的容器网段是10.10.0.0/16。

Kubernetes中使用CNI

Kubelet要使用CNI网络驱动需要配置启动参数--network-plugin=cni。Kubelet从--cni-conf-dir(默认为/etc/cni/net.d)中读取文件,并使用该文件中的CNI配置配置每个Pod网络。CNI插件二进制文件所放置的目录通过Kubelet的--cni-bin-dir参数配置,默认为/opt/cni/bin。

下面以Pod带宽控制为例,介绍Kubernetes使用CNI插件的流程。

当书以下Pod配置:

Kubernetes会自动为这个Pod分别限制上传和下载的带宽为1Mb/s。注意,需要自己在/etc/cni/net.d目录下写一个配置文件,例如my-net.conf:

这个配置文件会告诉Kubelet去调用CNI的默认bandwidth插件,然后根据Pod annotation里带宽的ingress/egress值进行容器上行/下行带宽的限制。当然,CNI插件最后调用的还是Linux tc工具,主机上的tc配置如下所示:

Pod带宽控制的底层技术栈如图3-12所示。用户通过Pod的annotations下发带宽限制数值,CNI的bandwidth插件调用Linux流量控制插件tc,在宿主机上应用tc配置。

图3-12 Pod带宽控制的底层技术栈

以上是关于《Kubernetes网络权威指南》读书笔记 | 打通CNI与Kubernetes:Kubernetes网络驱动的主要内容,如果未能解决你的问题,请参考以下文章

《Kubernetes网络权威指南》读书笔记 | iptables

《Kubernetes网络权威指南》读书笔记 | 打通CNI与Kubernetes:Kubernetes网络驱动

《Kubernetes网络权威指南》读书笔记 | Kubernetes网络策略:为你的应用保驾护航

《Kubernetes网络权威指南》读书笔记 | 最常用的Docker网络技巧

《Kubernetes网络权威指南》读书笔记 | Linux隧道网络的代表:VXLAN

《Kubernetes网络权威指南》读书笔记 | 主角登场:Linux容器