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。(配置更多的网络策略)

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐