《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带宽控制的底层技术栈

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值