k8s的网络类型

1、k8s三种通信方式

1.1pod内部的网络通信

pod内部容器的通信,pod创建完成之后,集群会分配pod一个全局的唯一ip地址,所有的容器共享ip地址

pod内部可以用本地通信+端口的形式互相通信

1.2同一个node节点上的pod通信

docker0网桥,同一个节点上的pod和docker的通信方式是一样的

1.3不同节点上pod之间的通信

想办法通过主机的物理网卡ip进行通信

需要满足的条件:
1、pod的ip地址不能冲突

2、pod的ip地址要和node节点的ip地址进行关联

2、CNI

是一个标准接口,用于容器在运行时调用网络插件,配置容器的网络

CNI负责设置容器的网络命名空间、ip地址、路由等网络参数

通信的核心:

pod的ip地址进行封装,通过node节点作为路由器,转发到其他的node节点,其他的node节点收到数据包之后解包,把数据包转发到指定的pod

3、flannel插件

3.1功能

可以让集群中不同节点创建的pod都有集群内部唯一的ip地址(虚拟)

3.2特点

是一种overlay网络,overlay是一种网络虚拟化技术,在底层的物理网络基础之上创建一个逻辑的网络层,从而实现跨节点的pod之间的通信

3.3flannel数据转发的方式

1、UDP:默认方式,基于应用层转发,配置最简单,性能最差

2、VXLAN:基于内核进行转发(虚拟网卡flannel.1)
和VLAN都是通过标识来实现广播域的划分,不同的vlan之间可以通信
VXLAN的标识是vni,数据中心进行广域网的划分,通过三层网络搭建一个虚拟的二层网络

3、HOST-GW:主机模式,性能最好,但是配置繁琐

如何识别UDP和VXLAN
使用ifconfig会多两个虚拟的网卡设备
UDP:flannel.0
VXLAN:flannel.1

4、calico网络

使用host主机作为路由器,使用BGP同步路由以及iptables来做网络。把host主机当做一个路由器

采用直接路由的方式实现,损耗很低,不需要修改数据包的报文,pod太多。路由表比较复杂,维护起来比较麻烦

适用于大集群的复杂网络模式

calico--------veth-pair虚拟设备,一个虚拟的网卡

一头设备连接pod的网络空间,一头连接主机的网络空间

calico通过linux的网络命名空间和路由表实现容器之间的通信

5、总结

flannel插件:默认的地址是10.244.0.0/16
三种模式:UDP、VXLAN、HOST-GW
flannel的功能简单,不具备复杂的网络策略的配置能力,小集群或者简单的网络首选

calico:BGP直接路由。路由维护、路由转发
默认网段:192.168.0.0/16
calico是一个可以对网络进行管理的插件,具备配置复杂网络的能力,本身的配置比较复杂,对开发人员、运维人员要求比较高
需要复杂配置的可以使用calico(配置更多的网络策略)

你可能感兴趣的:(kubernetes,网络,容器)