K8S网络类型

k8s的网络类型

k8s的通信模式

|---|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 | pod内部之间容器与容器之间的通信,在同一个pod中容器是共享资源和网络,使用同一个网络命名空间,可以直接通信 |
| 2 | 同一个node节点之内,不同pod之间的通信,每个pod都有一个全局的真实ip地址,同一个node之间的不同pod可以直接使用对方pod的ip地址进行通信,pod1和pod2是通过docker0的网桥来进行通信 |
| 3 | 不同node节点上的pod之间如何通信,cni的插件:cni是一个标准接口,用于容器运行时调用网络插件,配置容器网络,负责设置容器的网络命名空间,IP地址,路由等等参数 Flannel插件:功能就是让集群之中不同节点的docker容器具有全集群唯一的虚拟ai地址,他是一个overlay网络,在底层物理网络的基础之上,创建一个逻辑的网络层,准确的说它是二层加三层的集合,二层是物理网络,三层是逻辑上的网络层,overlay网络也是一种网络虚拟化的技术 |

Flannel支持的数据转发方式

|---|---------------------------------------------------------------|
| 1 | UDP模式,默认模式,应用准发,配置简单,但是性能最差 |
| 2 | Vxlan,基于内核转发,也是最常用的网络类型(小集群都是用这个) |
| 3 | Host-gw(性能最好,但是配置麻烦) |
| | UDP:基于应用转发,flannel提供路由表,fannel封装数据包,解封装 Node都会有一个flannel的虚拟网卡 |

|-----------------------------------------------------------------------------------------|
| Vxlan:使用的就是overlay的虚拟隧道通信技术,二层+三层模式 Udp基于应用层,用户 Vxlan:flannel提供路由表,内核封装解封装 Flannel1.1接口 |

Calico插件

|-----------------------------------------------------------------------------------------------------|
| Flannel:每个发向容器的数据包进行封装,vxlan通过vtep打包数据,由内核封装成数据包再转发到目标node节点,到了目标节点,还有一个解封装的过程,再发送到目标pod,性能是有一定的影响。 |

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Calico:采用直接路由的方式:BGP方式路由,它不需要修改报文,统一直接通过路由表换发,路由表会相当复杂,运行维护的要求比较高 BGP模式的特点:交换路由信息的外部网关协议,可以连接不同的node节点,node节点可能不是一个网段,BGP会自动寻址,自动选择可靠的路径,BGP实现可靠的,最佳的,而且是动态的路由选择,自动识别相邻的路由设备 Calico不使用overlay,也不需要交换,直接通过虚拟路由实现,每一台虚拟路由都通过BGP转发 |

核心组件

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Felix:也是运行在主机的一个pod,一个进程,k8s,daemonset的方式部署的pod Daemont set 会在每个node节点部署相同的pod,后台的运行方式 负责宿主机上插入路由规则,维护calico需要的网络设备,网络接口的管理,监听,路由等等。BGP Client: bird BGP的客户端,专门负责在集群中分发路由规则的信息,每一个节点都会有一个BGP Client、 BGP协议广播的方式通知其他节点的,分发路由的规则,实现网络互通 Etcd:保存路由信息,负责网络元数据的一致性,元数据是保证网络状态的一致性和准确性 |

Calico的工作原理

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 路由表来维护每个pod之间的通信 创建好pod之后,会添加一个设备cali veth pair设备,在ifconfig中看到的也是一个虚拟网卡 虚拟网卡:veth pair是一对设备,虚拟的以太网设备,有两头,一头连接在容器的网络命名空间一般叫做eth0,另一头连接宿主机的网络命名空间也就是cali IP地址分配:veth pair连接容器的部分给容器分配一个ip地址,这个ip地址是唯一标识,宿主机也会被veth pair分配一个calico的内部网络ip地址,和其他节点上的容器进行通信 Veth设备,容器发出的ip地址通过veth pair设备到宿主机,宿主机根据路由规则的下一跳地址,发送到网关(目标宿主机,) 数据包到达目标宿主机,veth pari设备 目标宿主机也是根据路由规则,下一跳地址 |

|-----------------------------------------------------------------------------|
| 根据路由规则转发由BGP发现 在ipip模式:会生产一个tunnel(隧道),所有的数据包都在tunnel内部打包,封装:宿主机ip容器内部的ip地址 |

Flannel和calico区别

|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Flannel | Flannel:配置简单,功能简单,基于overlay叠加网络实现,在屋里层的网络在封装一个虚拟的网络 Vxlan是虚拟三层网络 Udp是默认模式 Vxlan是默认用的最多的模式,基于vni+ip进行转发,flannel提供路由表,内核封装和解封装,由于封装和解封装的过程,对数据传输的性能会有影响,没有网络策略配置的能力UDP(协议,只管发) 默认网段10.244.0.0/16 Host-gw |
| Calico | Calico:功能强大,基于路由表进行转发,没有封装和解封装的过程,具备网络策略的配置能力,但是路由表维护起来复杂 有两个模式:ipip BGP BGP:模式通过ip路由表的前缀来实现目标主机的可达性, 特点:对比ipip模式,BGP模式没有隧道,BGP模式下,POD的数据包直接通过网卡发送到目标主机也就是目的地 Ipip的隧道:隧道进行数据包的封装ipv4---ipv4. 简单的小集群:flannel 涉及到扩容,配置网络策略:calico |

|-------------------------------------------------------------------------------------------------------------------------------|
| Coredns 可以为集群当中的service资源创建一个域名和ip进行映射的关系 Service是对外提供访问的地址,现在我们加入DNS机制之后,可以直接访问他的服务名 Dashboard 仪表盘,kubenetes的可视化界面,在这个可视化界面上 |

相关推荐
运维大师6 分钟前
【K8S 运维实战】03-网络模型实战CNI
运维·网络·kubernetes
AOwhisky16 分钟前
Python 学习笔记(第十一期)——运维自动化(上·后篇):进程级监控与子进程管理——psutil进阶
运维·开发语言·python·学习·云原生·运维开发
heimeiyingwang2 小时前
【架构实战】GitOps实践:Kubernetes上的声明式交付
elasticsearch·架构·kubernetes
Ai拆代码的曹操15 小时前
K8s Pod Pending 逐层排查:从 FailedScheduling 到 PVC StorageClass 不存在的实战记录
java·linux·kubernetes
杨了个杨898216 小时前
Docker Compose 简介及应用
运维·docker·容器
java_logo21 小时前
Docker 部署 Home Assistant:在群晖 NAS 或 Linux 上打造家庭智能中枢
linux·docker·容器·homeassistant·轩辕镜像·homeassistant部署·homeassistant教程
L-影21 小时前
单体与微服务区别
微服务·云原生·架构
极客先躯1 天前
高级java每日一道面试题-2026年04月18日-实战篇[Docker]-如何处理金融行业的时序数据容器化?
java·运维·docker·容器·金融·时序数据·高级面试
运维大师1 天前
【K8S 运维实战】01-K8s架构深度剖析
运维·架构·kubernetes