网络通讯方式,网络模型

网络通讯方式,网络模型

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),通过这个覆盖网络,将数据包原封不动地传递到目标容器内

image

右上角的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的数据报文来转发数据包,因为更快

image


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网络是虚拟网络,节点网络为真实网络

image

posted @   立勋  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示