美文网首页
Kubernetes-网络通讯方式

Kubernetes-网络通讯方式

作者: ssttIsme | 来源:发表于2023-05-10 22:07 被阅读0次

Kubernets的网络模型假定了所有Pod都在一个可以直接连同的扁平网络空间中(所有Pod都可通过对方IP直接到达)。

同一个Pod内部通讯

同一个Pod共享Pause基础容器的Linux协议栈,他们直接互相访问就是走的这个网络栈的IO,通过localhost(回环网卡)的方式能直接访问。

Pod1至Pod2-各Pod之间的通讯

Pod1与Pod2在同一台机器

由Docker0网桥直接转发请求至Pod2,(因为大家都是在同一个网桥下面不同的子网)不需要经过Flannel-【也就是在真实服务器的主机内核已经完成了数据包的转换】


Pod1与Pod2不在同一台机器(跨主机通过对方的IP到达)

Pod的地址与docker0实在同一个网段的,但是docker0网段与宿主机网卡是两个完全不同的IP网段,并且不同Node之间的通信只能通过宿主机的物理网卡进行。将Pod的IP和所在Node的IP关联起来,通过这个关联让Pod可以互相访问。
(在真实的Node服务器上会安装Flanneld的守护进程,这个进程会监听一个端口,这个端口就是用于后期转发数据包以及接入数据包的服务端口,Flanneld进程启动后会开启一个网桥叫Flannel0,Flannel0专门收集Docker0转发出来的数据包,可以理解为钩子函数强行获取数据报文。Docker0会分配自己的IP到对应的Pod上。)


例子:假设Web app2想把数据包转发到Backend,它的数据包先写入10.1.15.2/24,因为目标的网段和自己不是同一个网段,所以它先发到自己的网关Docker0,Docker0上会有钩子函数把数据包抓到Flanne0,Flanneld还会从etcd拿路由表记录判断路由到哪个机器,因为Flannel0是Flanneld的网桥,数据包会到Flanneld,它会对数据报文进行封装【mac-到三层-到udp数据报文-到新的三层信息-到数据包实体Payload】,因为三层写了到192.168.66.12所以数据包到达192.168.66.12Node节点,并且数据包到达目标Flanneld的端口被Flanneld截获,截获后Flanneld拆封,拆封完转发Flannel0,Flannel0转发到Dokcer0,Docker0看到新三层的目标地址信息10.1.20.3把10.1.15.2数据包。转发到Backend端

Flannel和ETCD的关联:1存储管理Flannel可分配的IP地址段资源(Flannel启动后会向ETCD插入可以被分配的网段,并且把哪个网段分配到哪个机器也记录上,防止已分配的网段再被Flannel利用分配给其他Node节点)2Flannel监控ETCD中每个Pod的实际地址,并在内存中建立维护Pod节点路由表(因为封装最上层的三层信息的时候需要对方主机的地址信息)

Pod至Service直接的通信

基于各节点的Iptables规则进行维护和转发,最新版本加入了LVS机制进行维护和转发(转发的效率和上限会更高)

Pod到外网

Pod向外网发送请求,查找路由表,转发数据包到宿主机网卡,宿主机网卡完成路由选择后,iptables执行Masquerade(SNAT动态转换去完成上网行为),把源IP更改为宿主网卡的IP,然后向外网服务器发送请求

外网访问Pod

Service的NodePort方式

谷歌没有对Kubernetes做很强的定义,允许通过CNI接口来达到自己想要的网络方案。Flannel是符合CNI接口的最常用的解决扁平化网络的方案。Flannel是CoreOS团队针对Kubernets设计的网络规划服务,它的功能是让集群中的不同节点主机创建的Docker容器具有全集群唯一的虚拟IP地址。而且它还能在这些IP地址之间建立一个覆盖网络(Overlay Network),通过这个覆盖网络,将数据包原封不动地传递到目标容器内。
不同容器之间IP一定不能一样(可以修改docker启动的配置文件,把docker0网桥的分配网段修改掉,只要docker0分配的网段不一样,容器的IP肯定能够不一样)。

Kubernetes的三层网络:
节点网络(真实的物理网络)、Pod网络(虚拟网络)、Service网络(虚拟网络)

相关文章

  • Kubernetes 部署

    更新链接: https://github.com/mushuanli/wsue/wiki/Kubernetes-%...

  • 12.2-全栈Java笔记: TCP协议和UDP协议

    区别 在网络通讯中,TCP方式就类似于拨打电话,使用该种方式进行网络通讯时,需要建立专门的虚拟连接,然后进行可靠的...

  • Kubernetes-在Kubernetes集群上搭建Hadoo

    准备工作 Hadoop镜像,到docker hub上拉取 Kubernetes集群参考:Kubernetes-离线...

  • Kubernetes-重要概念

    感谢作者提供的重要概念的汇总,很是有收益 Kubernetes-重要概念[https://www.hi-linux...

  • UDP和TCP

    在现有的网络中,网络通讯的方式主要有两种: TCP(传输控制协议)方式 UDP(用户数据报协议)方式 TCP通讯协...

  • Retrofit的原理

    Retrofit是目前比较流行的网络框架,它封装了okhttp作为底层的网络通讯框架, 使用动态代理方式来解析注...

  • Retrofit的内核原理解析

    简介 Retrofit是目前比较流行的网络框架,它封装了okhttp作为底层的网络通讯框架, 使用动态代理方式来解...

  • Mac 开发之网络通讯

    本文包含:Mac开发中网络通讯常见问题、Mac端 网络通讯demo。 错误一:输出台:App Transport ...

  • 网络通讯

    UDP UDP多播 多播(组播)的概念多播,也称为“组播”,将网络中同一业务类型主机进行了逻辑上的分组,进行数据收...

  • 网络通讯

    自从开始网络教学以来,我对网络通讯的理解也在悄无声息的发生着巨大的变化。刚刚开始上网课的时候,还是认为着网络通讯的...

网友评论

      本文标题:Kubernetes-网络通讯方式

      本文链接:https://www.haomeiwen.com/subject/dfljsdtx.html