cannal 网络使用flannel 作为node之间的连接网络,同时使用calico 作为 网络policy 管理器
flannel 解析
flannel 架构图
image.png报文发送路径为
- 容器直接使用目标容器的ip访问,默认通过容器内部的eth0发送出去。
2.报文通过veth pair被发送到vethXXX。
3.vethXXX是直接连接到虚拟交换机docker0的,报文通过虚拟bridge docker0发送出去。 - 查找路由表,外部容器ip的报文都会转发到flannel0虚拟网卡,这是一个P2P的虚拟网卡,然后报文就被转发到监听在另一端的flanneld。
- flanneld通过etcd维护了各个节点之间的路由表,把原来的报文UDP封装一层,通过配置的iface发送出去。
- 报文通过主机之间的网络找到目标主机。
- 报文继续往上,到传输层,交给监听在8285端口的flanneld程序处理。
- 数据被解包,然后发送给flannel0虚拟网卡。
- 查找路由表,发现对应容器的报文要交给docker0。
- docker0找到连到自己的容器,把报文发送过去。
flannel 的相关配置和组件位置
K8S 安装cannal后,会有三个cannal 的pod
image.png
通过
kubectl describe pod cannal-xxxx 会发现其中一个是flannel的 容器。
# 更快的方法是直接使用docker ps
image.png
用 kubectl exec -it 或者docker exec -it 进入容器。可以发现配置文件路径如下
- /etc/kube-flannel
- /run/flannel
image.png
Flannel启动过程解析:
- 从etcd中获取network的配置信息
- 划分subnet,并在etcd中进行注册
- 将子网信息记录到/run/flannel/subnet.env中
Calico
Calico 架构
image.pngcalico包括如下重要组件:Felix,etcd,BGP Client,BGP Route Reflector。下面分别说明一下这些组件。
- Felix:主要负责路由配置以及ACLS规则的配置以及下发,它存在在每个node节点上。
- etcd:分布式键值存储,主要负责网络元数据一致性,确保Calico网络状态的准确性,可以与kubernetes共用;
- BGPClient(BIRD), 主要负责把 Felix写入 kernel的路由信息分发到当前 Calico网络,确保 workload间的通信的有效性;
- BGPRoute Reflector(BIRD), 大规模部署时使用,摒弃所有节点互联的mesh模式,通过一个或者多个 BGPRoute Reflector 来完成集中式的路由分发;
原理
image.png
配置文件位置
/etc/calico/confd/conf.d 主机里的位置 -----> /etc/calico/confd pod里的位置
CNI 相关的文件夹
- /etc/cni/net.d/ 存放配置文件
- /opt/cni/bin 存放cni 插件的可执行文件
- /var/lib/cni 存放 K8S的网络说明文件
网友评论