k8s的网络类型:
CNI网络插件:flannel calico
k8s的三种通信方式:
1、pod内部的网络通信:
pod内部容器的通信,pod创建完成之后,集群会分配pod一个全局的唯一IP地址。所以的容器共享这个IP地址。
pod内部可以用本地通信+端口形式互相通信。
2、同一个node节点上的pod通信:
docker0网桥。同一个节点上的pod和docker的通信方式是一样的。
3、不同节点上pod之间的通信:
想办法通过主机的物理网卡IP地址进行通信。
1)pod的ip地址不能冲突
2)pod的ip地址要和node节点的IP地址进行关联。
CNI
CNI:CNI是一个标准接口,用于容器运行时调用物理插件,配置容器的网络。
CNI负责设置容器的网络命名空间,IP地址、路由等网络参数。
pod的IP地址进行封装,通过node节点作为路由器,转发到其他的node节点,其他的node节点收到数据包之后解包,把数据包转发到指定的pod。
CNI插件的两个类型:
Flannel插件:
让集群中不同节点创建的pod都有集群内部唯一的IP地址。(虚拟)
Flannel 是一种overlay网络,overlay是一种网络虚拟化技术,在底层的物理网络基础之上创建一个逻辑的网络层。
从而实现跨节点的pod之间的通信。
Flannel数据转发的方式:UDP(少) VXLAN(主流) HOST-GW(主机模式,性能最好,但配置复杂,没人用)
VXLAN:基于内核进行转发
UDP:默认方式,基于应用层转发,配置最简单,性能最差
HOST-GW:性能最好,但是配置繁琐
VXLAN
ifconfig:
UDP:flannel.0
VXLAN:flannel.1
VXLAN VLAN 都是通过标识来实现广播域的划分。
VLAN 不同的vlan之间可以通信。0 1 4096 2-4095 4094个 vlanid
VXLAN 标识,vni 数据中心进行广域网的划分。通过三层网络搭建一个虚拟的二层网络------------>三层交换机
工作模式:
1、流程流向
搭建网络模式:
#flannel.tar kube-flannel.yml cni-plugins-linux-amd64-v0.8.6.tgz 将这三个文件都拖到master上,两个node只要flannel.tar和cni-plugins-linux-amd64-v0.8.6.tgz
[root@master01 opt]# rz -E
rz waiting to receive.
[root@master01 opt]# rz -E
rz waiting to receive.
————————————————————三台机器上都操作——————————————————————
[root@master01 opt]# docker load < flannel.tar #这一步在三台机器上都操作
[root@master01 opt]# mv /opt/cni /opt/cni_bak
[root@master01 opt]# cd cni_bak/
[root@master01 cni_bak]# ls
bin
[root@master01 cni_bak]# mkdir -p /opt/cni/bin
[root@master01 cni_bak]# cd /opt/
[root@master01 opt]# tar -xf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin/
————————————————————下面这一步只在master上操作—————————————
[root@master01 opt]# kubectl apply -f kube-flannel.yml
[root@master01 ~]# vim /etc/profile
source <(kubectl completion bash) #在最后一行加入
[root@master01 ~]# source /etc/profile
[root@master01 opt]# ls
update-kubeadm-cert.sh
#证书有效期的问题,kubeadm默认只有1年:
openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text | grep Not
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep Not
./update-kubeadm-cert.sh all
执行脚本即可
calico网络:
使用host主机作为路由器,使用BGP同步路由以及iptables来做网络。把host主机当作路由器。
采用直接路由的方式实现。损耗很低,不需要修改数据包的报文,pod太多,路由表比较复杂,维护起来比较麻烦。
适用于大集群的复杂网络模式。
calico------------>veth-pair设备,一个虚拟的网卡。
一头设备连接pod内的网络空间,一头连接主机的网络空间。
calico通过linux的网络命名空间和路由表实现pod之间的通信。
flannel和calico的区别:
flannel插件:默认的地址是10.244.0.0/16
三种模式:UDP VXLAN HOST-GW
flannel的功能简单,不具备复杂的网络策略的配置能力。小集群或者简单的网络首先使用flannel插件。
calico:BGP直接路由,路由维护,路由转发
默认网段:192.168.0.0/16
calico是一个可以对网络进行管理的插件,具备配置复杂网络配置的能力。本身的配置比较复杂,对开发人员,运维人员要求比较高。
需要复杂配置的可以使用calico。(配置更多的网络策略)