Kubernetes网络一年发展动态与未来趋势(5)
下面我们将举几个CNI网络插件的例子。
上图是一个host-local + bridge插件组合的例子,在这么一个JSON文件中,我们定义了一个名为mynet的网络,是一个bridge模型,而IP地址管理(ipam)使用的是host-local(在本地用一个文件记录已经分配的容器IP地址)且可供分配的容器网段是10.10.0.0/16。至于K8S如何使用它们?Kubelet和CNI约好了两个默认的文件系统路径,分别是/etc/cni/net.d用来存储CNI配置文件和/opt/cni/bin目录用来存放CNI插件的二进制文件,在我们这个例子中,至少要提前放好bridge和host-local这两个插件的二进制,以及10-mynet.conf配置文件(叫什么名字随意,Kubelet只解析*.conf文件)。由于主流的网络插件都集成了bridge插件并提供了各自的ipam功能,因此在实际K8S使用过程中我们并不需要操心上面过程,也无需做额外配置。
再来看一个最近K8S V1.11版本合到社区主干的带宽控制插件的使用方法。当我们书写了以下Pod配置时:
K8S就会自动为我们这个Pod分别限制上传和下载的带宽为最高10Mb/s。注意,由于这个特性较新,我们需要自己在/etc/cni/net.d目录下写一个配置文件,例如my-net.conf:
{
"type": "bandwidth",
"capabilities": {"bandwidth": true}
}
这个配置文件会告诉Kubelet去调用CNI的默认bandwidth插件,然后根据Pod annotation里面关于带宽的ingress/egress值进行容器上行/下行带宽的限制。当然,CNI插件最后调用的还是Linux tc工具。