k8s中的通信模式:
1、pod内部之间容器与容器之间的通信
在同一个pod中的容器共享资源和网络,使用同一个网络命名空间,可以直接通信的
2、同一个node节点之内,不同pod之间的通信
每个pod都有一个全局的真实的ip地址,同一个node直接的不同pod可以直接使用对方pod的ip地址进行通信
pod1和pod2是通过docker0的网桥来进行通信
3、不同node节点上的pod之间如何进行通信
cni的插件
cni是一个标准接口,用于容器运行时调用网络插件,配置容器网络,负责设置容器的网络命名空间,ip地址,路由等等参数
flannel插件:功能就是让集群之中不同节点的docker容器具有全集群唯一的虚拟ip地址
overlay网络:在底层物理网络的基础之上创建一个逻辑的网络层,二层+三层的集合,二层是物理网络,三层是逻辑上的网络层
overlay网络也是一种网络虚拟化的技术
flannel支持的数据转发方式:
1、UDP模式:默认模式(一般不用),应用层的转发,配置简单,但是性能最差
2、vxlan:基于内核转发,也是最常用的网络类型(小集群都是用这个)
3、host-gw:性能最好,但是配置麻烦
UDP:基于应用转发,是由flannel提供路由表,由flannel封装数据包,以及解封装
node都会有一个flannel的虚拟网卡
vxlan:使用的就是overlay的虚拟隧道通信技术。二层+三层的模式
udp基于应用层,用户态
vxlan:flannel提供路由表,内核封装解封装
flannel1.1接口
93、94:
把软件包拖到opt目录
91:
cd /opt/k8s
传 kube-flannel.yml 文件到 /opt/k8s 目录中,部署 CNI 网络
93、94:
ifconfig查看一下有没有flannel.1
Calico插件:
flannel:每个发向容器的数据包进行封装,vxlan通过vtep打包数据,由内核封装数据包---------->转发到目标的node节点。
到了目标节点,还有一个解封装的过程,再发送到目标pod,性能是有一定影响的
calico:采用直接路由的方式。BGP路由,不需要修改报文,统一直接通过路由表转发,路由表会很复杂,运行维护的要求比较高
BGP模式的特点:交换路由信息的外部网关协议,可以连接不同的节点,node节点可能不是一个网段,BGP实现可靠的,最佳的,而且是动态的路由选择。自动识别相邻的路由设备
calico不使用overlay,也不需要交换,直接通过虚拟路由实现,每一台虚拟路由都通过BGP转发
核心组件:
felix:也是运行在主机的一个个pod,一个进程,k8s daemonset的方式部署的pod
daemontset会在每个node节点部署相同的pod,后台的运行方式
负责在宿主机上插入路由规则,维护calico所需要的网络设备。网络接口管理,监听,路由等等
BGP Client:bird BGP的客户端,专门负责在集群中分发路由规则的信息,每一个节点都会有一个BGP client
BGP协议广播方式通知其他节点,分发路由的规则,实现网络互通
etcd:保存路由信息,负责网络元数据的一致性,保证整个网络状态的一致和准确
calico的工作原理:
路由表来维护每个pod之间的通信
创建好pod之后,会添加一个设备cali veth pair设备
虚拟网卡:veth pair是一对设备,虚拟的以太网设备
一头连接在容器的网络命名空间 eth0
另一头连接宿主机的网络命名空间 cali
ip地址fenpei:veth pair连接容器的部分给容器分配一个ip地址,这个ip地址是唯一标识,宿主机也会被veth pair分配一个calico网络的内部ip地址,和其他节点上的容器进行通信
veth设备,容器发出的ip地址通过veth pair设备到宿主机,宿主机根据路由规则的下一跳地址,发送到网关(目标宿主机)
数据包到达目标宿主机,veth pair设备,目标宿主机也是根据规则,下一跳地址,转发到目标容器
ipip模式:会生成一个tunnel。数据包都在tunnel内打包。封装:宿主机ip,容器内部的ip地址
91:
拖yml包
取消注释(ip地址自定义)
kubectl apply -f calico.yaml
kubectl get pods -n kube-system
kubectl get nodes
93、94:
ifconfg
flannel的特点:
配置简单,功能简单,基于overlay叠加网络实现,在物理层的网络上再封装一个虚拟的网络
vxlan是虚拟三层网络
udp是默认模式
host-gw
由于封装和解封装的过程,对数据传输的性能会有影响,没有网络策略配置的能力UDP(协议)
默认网段:10.244.0.0/16
calico的特点:
功能强大,基于路由表进行转发,没有封装和解放装的过程。具备网络策略的配置能力,但是路由表维护起来比较复杂
模式:ipip BGP
BGP:通过ip路由表的前缀来实现目标主机的可达性
对比ipip模式,BGP模式没有隧道,BGP模式下,POD的数据包直接通过网卡发送到目的地
ipip的隧道,隧道进行数据包的封装ipv4----ipv4
简单的小集群:flannel
扩容,配置网络策略:calico
coredns:
可以集群当中的service资源创建一个域名和ip进行对应解析的关系
service