k8网络组件法兰绒的介绍和部署

  

<强>法兰绒
法兰绒是一个网络组件,可以为不同节点节点的分配不同的子网,实现容器间的跨机通信,从而实现整个kubenets层级通信。由此可知,该组件运行于节点节点上,依赖组件为etcd,码头工人。

其实k8网络组件法兰绒和棉布主要解决的问题是k8节点之间容器网络的通信,法兰绒要保证每个吊舱的IP是唯一的,怎么保证是唯一的,大部分组件的做法是在每个节点上分配一个唯一的子网,node1是一个单独的子网,node2是一个单独的子网,可以理解是不同网段,不同vlan,所以每个节点都是一个子网,所以法兰绒会预先设置一个大的子网,然后在这个每个节点上分配子网,这些信息都会由法兰绒存储到etcd中,并且每个子网绑定到节点上都有关系记录的,然后方便下次进行二次的数据包传输,并且法兰绒在节点上会启动一个守护进程并运行,守护进程主要维护的是本地的路由规则,和维护etcd中的信息。

1,法兰绒部署

 <代码> https://github.com/coreos/flannel
  kubectl应用- f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml  

部署好之后会以daemonset的形式在每个节点上启动一个豆荚,来启动一个法兰绒的守护进程,主要负责本机路由表的设定和etcd中的数据,本地的子网上报到etcd中,所以守护进程是非常重要的
可以在法兰绒的配置文件去设定大的子网,还有属性模式

 <代码> net-conf。json: |
  ,,{
  ,,,“Network":“10.244.0.0/16"
  ,,,“Backend": {
  ,,,,“Type":“vxlan"
  ,,,}
  ,,}
  
  推荐- - - - - -  

这个配置完之后会放到参股了这个目录下,由于法兰绒是使用网桥的模式,实现的同节点数据包到达宿主机这个的通信,所以子网信息并没写到这个配置文件里,而是放到了这个猫/var/run/flannel/subnet.env下,这个通过ip一个也能看到设备分配的ip,每个节点都会分配一个子网,网络接口设备为cni0,也就是一个节点上可以分配255个小的子网

 <代码> root@k8s-node2 ~ #猫/var/run/flannel/subnet.env
  FLANNEL_NETWORK=10.244.0.0/16
  FLANNEL_SUBNET=10.244.0.1/24
  FLANNEL_MTU=1450
  FLANNEL_IPMASQ=true  

还有一个参股的二进制文件,/opt/公司/bin,这个就是kubelet调用这个二进制接口为创建的每个吊舱创建网络信息,并且是从我们的配置的子网中去拿IP

配置的话修改的是就是预先设定它的子网,以及工作模式,另外就是这个网络不能与k8本身的内网冲突,否则导致网络不通的状况

<强> 2,法兰绒工作模式及原理
法兰绒支持多种数据转发方式:
UDP:最早支持的一种方式,由于性能最差,目前已经弃用。
VXLAN:覆盖网络方案,源数据包封装在另一种网络包里面进行路由转发和通信
这也是网络的虚拟化技术,也就是原来是有一个包数据包,有源IP和目的IP,但由于某些情况这个数据包到达不了目的地址上,这可能就会借助物理上的以太网网络进行封装一个数据包带上,然后通过这种物理网络传输到目的地址上,这是一种叠加式的网络,里面是有两种数据包的,这种也叫做隧道方案
Host-GW:法兰绒通过在各个节点上的代理进程,将容器网络的路由信息刷到主机的路由表上,这样一来所有的主机都有整个容器网络的路由数据了,这样它就知道这个数据包到达这个节点转发到这个机器上,也就是路由表之间转发的,这种也叫路由方案
VXLAN

使用kubeadm部署的话默认是支持的

 <代码> kubeadm部署指定舱网段
  kubeadm init——pod-network-cidr=10.244.0.0/16  

但是使用二进制部署就得去启动参股的支持,默认我ansible部署的k8集群都是启动的
二进制部署指定

 <代码>猫/opt/kubernetes/cfg/kube-controller-manager.conf
  ——allocate-node-cidrs=true \,,允许节点自动分配cidr这个网络
  ——cluster-cidr=10.244.0.0/16 \,指定舱网络的网段,这个网段要和法兰绒的网段对应上 

另外也都要在每节个节点点的kubelet的配置文件上进行对参股的支持

 <代码> [root@k8s-node1 ~] #猫/opt/kubernetes/cfg/kubelet.conf
  ——network-plugin=cni \  

这样的话就能以参股的标准来为k8配置网络

 <代码> kube-flannel.yml
  net-conf。json: |
  ,,{
  ,,,“Network":“10.244.0.0/16"
  ,,,“Backend": {
  ,,,,“Type":“vxlan"
  ,,,}
  ,代码,} 

在节点1上有个容器,与节点2上的容器进行通信,这两个是进行跨主机进行的通信,如果本机通信之间使用网桥使用二层的传输了,像原生的码头工人网就能解决了,最重要的是这两个节点的数据包传输

k8网络组件法兰绒的介绍和部署