kubernetes网络和CNI简介

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kubernetes网络和CNI简介相关的知识,希望对你有一定的参考价值。

参考技术A

对于任何kubernetes网络方案,都需要满足以下 需求

容器通过使用linux内核提供的Cgroups和Namespaces技术实现了相互之间的网络、存储等资源的隔离与限制。对于网络,kubernetes项目中的Pod则通过让一组用户容器和pause容器/infra容器共享一个network namespace的方式,使一个Pod内的容器都使用了一个网络栈。而一个 Network Namespace 的网络栈包括:网卡(Network Interface)、回环设备(Loopback Device)、路由表(Routing Table)和 iptables 规则。所以,不难想象,Pod的网络和一台虚拟机的网络栈配置起来实际上是类似的,比如同样需要虚拟网卡,IP、MAC地址等,并且每个Pod都有自己唯一的网络栈。当所有的Pod都有了自己的网络栈后,如果想要连接两个Pod进行通信,则类似于其他任何网络架构,需要配置交换机、路由器等,并为其规划IP,路由等信息。如果是对于物理机,我们可以使用网线、交换机、路由器这些设备进行连接,但在Pod中显然需要其他方式。

kubernetes Pod的网络方案有很多,最典型的就是Flannel的三种后端实现方式了(UDP、VxLan、host-gw),讨论这些则主要是在关注容器跨主机通信的问题。而这里主要讨论的则是Pod的内部的网卡如何创建,又如何将网络数据包在宿主机和容器之间传递。

图片来自 这里

CNI是Container Network Interface的缩写,它是一个通用的容器网络插件的k8s 网络接口 ,开源社区里已经有了很多实现容器网络的方案,不同的网络实现方案在k8s内都是以插件调用的形式工作,所以这里需要一个统一的标准接口。如果将k8s的Pod视为一台“虚拟机”,那么网络插件的工作就是管理这台虚拟机的网络栈,包括给这台虚拟机插入网卡、配置路由、IP等;而CNI的工作则是对接 网络插件 kubelet 容器运行时管理工具(对于docker容器运行时来说实际上是dockershim),主要体现在Pod的创建和删除过程:

CNI 配置文件,给CRI使用的,比如dockershim

CNI官方维护的插件包括以下几个,对于已经搭建好的k8s,cni插件可以在 /opt/cni/bin/ 文件夹下查看:
CNI的基础可执行文件按照功能可以划分为三类:
Main插件:创建具体网络设备
bridge :网桥设备,连接container和host
ipvlan :为容器增加ipvlan网卡
loopback :lo设备
macvlan :为容器创建一个MAC地址
ptp :创建一对Veth Pair
vlan :分配一个vlan设备
host-device :将已存在的设备移入容器内

IPAM插件:负责分配IP地址
dhcp :容器向DHCP服务器发起请求,给Pod发放或回收IP地址
host-local :使用预先配置的IP地址段来进行分配
static :为容器分配一个静态IPv4/IPv6地址,主要用于debug

meta插件:并非单独使用
bandwidth :使用Token Bucket Filter(TBF)来限流的插件
flannel :flannel网络方案的CNI插件,对应于flannel配置文件
portmap :通过iptables配置端口映射
sbr :为网卡设置source based routing
tuning :通过sysctl调整网络设备参数
firewall :通过iptables给容器网络的进出流量进行一系列限制

实验内容:go安装社区维护的CNI相关插件,在linux主机上创建一个network namespace,再利用安装的网络插件给这个linux network namespace配置好网络。 实验方法教程参考的是 这里

安装cni插件:

linux上创建一个network namespace:

设置网络参数:
vi /etc/cni/net.d/10-myptp.conf

模拟给容器配置网络:

返回值

测试网络是否可用:

进入namespace,ping一下百度的DNS

清除:

最后多说一句,所谓的云服务其实就是基于网络的服务,好好规划网络可以充分利用数据中心的资源,只有充分利用数据中心的资源,才能称之为云计算。

以上是关于kubernetes网络和CNI简介的主要内容,如果未能解决你的问题,请参考以下文章

kubernetes 概述和kubeadm方式集群搭建

kubernetes 概述和kubeadm方式集群搭建

kubernetes 概述和kubeadm方式集群搭建

Kubernetes网络自学系列 | 打通CNI与Kubernetes:Kubernetes网络驱动

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

Kubernetes — Flannel CNI