网络通讯方式,网络模型
网络通讯方式,网络模型
kubernetes网络模型
- 每个Pod都拥有一个独立的IP地址
- 每个Pod都能够使用这个IP访问同一节点或不同节点内的其他Pod
- CNI规定pod创建或销毁时网络应该如何创建或销毁
- kubelet在创建pod时会查看cni的上述规定(--cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/etc/cni/bin)
网络通讯方式
- 同一个pod内的多个容器之间,公用pause容器的网络栈,通过pause容器的lo口互相访问
- 各pod之间的通信,通过overlay network
- pod与service之间的通讯:各节点的iptables规则
不同情况下网络通信方式
1.同一个Pod中的容器之间通讯
- 同一个pod公用pause容器的网络栈,通过PodIP:容器端口的方式通信
2.Pod与Pod之间通讯
- Pod在同一台主机上:由docker0网桥直接转发请求
- Pod不在同一台主机上:每个node上会创建一个flannel0虚拟网卡,用于跨node通讯。 跨节点通讯时,发送端数据会从docker0路由到flannel0虚拟网卡,接收端数据会从flannel0路由到docker0,这是因为flannel会添加一个路由。
- flannel的原理是将网络包封装在udp里面,所以发送端和接收端需要装包和解包,对性能有一定的影响
3.pod访问service服务
- service对内提供服务:通过ClusterIP的方式,在集群内分配一个虚拟IP
- service对外提供服务:通过NodePort的方式映射到主机,使用主机的IP和端口对外提供服务
pod的ip是docker0分配的
node的IP是flannel分配的
Flannel
是CoreOS团队针对Kubernetes设计的一个网络规划服务
功能
让集群中不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。而且它还能在这些IP地址之间建立一个覆盖网络(Overlay Network),通过这个覆盖网络,将数据包原封不动地传递到目标容器内
右上角的destination地址是192.168.66.12
描述
在真实的node服务器上,我们会安装一个flanneld的守护进程,它会监听一个端口,这个端口用来后期转发数据包,flanneld守护进程开启后会创建一个网桥flanneld0,flanneld0专门收集docker0网桥转发的数据报,docker0会分配ip到对应的pod上
假设webapp2 要访问backend,webapp2的数据包到达上边的flanneld时会进行二次封装,第一次封装源地址是66.11,目标地址是66.12,第二次封装时源地址是15.2,目标地址是20.3
使用udp的数据报文来转发数据包,因为更快
etcd和flannel之间的关联
1.etcd中存储着flannel可分配的ip地址,flannel启动后会向etcd中插入可以被分配的ip地址段,etcd记录哪些ip地址段已经被利用,防止ip地址段再被flannel利用,分配给其他node节点
2.flannel监控etcd中每个pod的实际地址,并在内存中建立维护pod节点路由表,这样可以让flannel知道目标pod地址在哪个node地址下
网络通讯示意图
k8s中有三个网络 service网络 pod网络 节点网络
service网络和pod网络是虚拟网络,节点网络为真实网络
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」