k8s(二)

文章目录

  • 前言
  • [一、K8S 中 Pod 网络通信的三种情况](#一、K8S 中 Pod 网络通信的三种情况)
    • [1.1 同一nod节点中](#1.1 同一nod节点中)
    • [1.2 同一pod中的容器](#1.2 同一pod中的容器)
    • [1.3 不同node节点上](#1.3 不同node节点上)
  • 二、Flannel方案
    • [2.1 Flannel UDP 模式通信流程](#2.1 Flannel UDP 模式通信流程)
    • [2.2 Flannel VXLAN 模式通信流程](#2.2 Flannel VXLAN 模式通信流程)
    • [2.3 Flannel Host-gw 模式通信流程](#2.3 Flannel Host-gw 模式通信流程)
  • 三、calico
  • 四、Flannel与calico的区别
  • 总结

前言

本文主要讲解k8s集群中pod网络通讯原理

一、K8S 中 Pod 网络通信的三种情况

1.1 同一nod节点中

同一node的每个pod都有自己独立的ip并且在同一网段,当pod1尝试访问pod2时,访问会通过网卡docker0进行转发到pod2,最终实现通讯。

1.2 同一pod中的容器

在前一篇博客我们了解到了pod中可以有很多个容器,而同一个pod中的所有容器都在同一个命名空间中,因此就相当于两个容器在同一个虚拟主机上,可以直接通过本地ip进行访问。

1.3 不同node节点上

这种相当于跨主机进行通信,由于外部ip互相不认识,因此这种通讯不能直接访问,跨主机方式进行通讯有两种方案,一种是Flannel另一种是calico。

二、Flannel方案

flannel方案又分为三种模式

2.1 Flannel UDP 模式通信流程

举例:container1(pod1)访问container2(pod2),pod1会将自己的ip与要通讯的目标(pod2)ip进行打包,发给网关,网关(cni)通过网桥发送给node1节点的网卡(eth0),网卡中的Flannel0再将网卡的ip与对端node2的网卡ip打包进入数据包中形成UDP包,然后通过宿主机网卡eth0将数据帧发送给对端node节点,node节点收到包后层层解包,先是拆出node2的ip,发现是找自己的就会继续拆包,拆出pod2的ip,然后会将包转发给pod2,最后pod2发现是找自己的就会拆数据包,提取里面的数据,实现互通。

2.2 Flannel VXLAN 模式通信流程

原理:podA1到podB2,pod1将自己的ip与对端pod2的ip和数据打包,形成数据包发送给网卡,网卡通过虚拟网桥cni将数据帧发送给Flannel1,flannel1给原始数据包加外层封装再发给node1的网卡,nod1的网卡ens160将自己的网卡ip与对端node2的网卡ip写入数据包中,同时将vxlan头部也加入到数据帧中,最后通过物理网卡ens160和vxlan隧道将数据帧快速的发送给对端网卡ens160,对端收到后,进行解包,发现是找自己的就会继续解包,发现要找podB2,就会将数据包转发给podB2。

特点:

1、转发速度快,通过vxlan进行数据帧转发。(与UDP的区别)

2、需要进行打包、解包

2.3 Flannel Host-gw 模式通信流程

原理:PodA1(10.244.1.2,Node A 的 Pod 子网)要访问 PodB2(10.244.4.3,Node B 的 Pod 子网),数据包从 Pod 的eth0发出,通过veth转发到 Node A 的cni0网桥。cni0发现目标 IP(10.244.4.3)属于 "10.244.4.0/24" 子网,查 Node A 的路由表,找到一条路径通往pod2,Node A 的ens160(物理网卡)直接将数据包发送到 Node B 的ens160,Node B 的ens160收到数据包后,查自己的路由表,发现 "10.244.4.0/24" 是自己的 Pod 子网,于是将数据包转发到 Node B 的cni0网桥,cni0将数据包通过veth转发到 PodB2 的eth0,PodB2 收到数据。

核心特点

1、无封装开销,性能最高(因为是纯路由转发);

2、Node 必须处于同一个二层网络(不能跨网段转发)。

三、calico

举例:pod1ip:10.244.1.2 pod2ip:10.244.2.3

原理:pod1访问pod2,pod1位于node1节点中,pod2位于node2节点中,pod将数据写入数据包发送给pod1的网卡eth0,eth0再通过网桥将数据包发送给node1节点的网卡,node1查找路由规则,BGP为node1找出转发的最佳路径,node1通过自己的物理网卡将数据包发送到对端的node2网卡,node2查找路由表发现有pod2后,将包发给pod2。

Calico 的核心思想

把每一台 Node 当成一台路由器

不使用隧道

不修改原始数据包

通过 BGP 同步路由表

直接三层转发

四、Flannel与calico的区别

总结

本文主要讲解k8s集群中pod网络通讯原理,谢谢观看。

相关推荐
为思念酝酿的痛5 小时前
POSIX信号量
linux·运维·服务器·后端
专业白嫖怪5 小时前
什么是docker
运维·docker·容器
人还是要有梦想的6 小时前
linux下用搜狗输入法,中英文切换
linux·运维·服务器
北京智和信通7 小时前
某部队IT基础设施及机房动环统一运维建设实例
运维·网管平台·网管软件·网络管理系统·网络运维平台·网络运维系统
乐维_lwops7 小时前
从 “救火运维” 到 “自动驾驶”:运维智能体到底解决了什么?
运维·人工智能·运维智能体
bush47 小时前
嵌入式linux学习记录二
linux·运维·学习
9分钟带帽7 小时前
linux_通过NFS挂载远程服务器的硬盘
linux·服务器
weixin_468466857 小时前
MoneyPrinterTurbo 短视频自动化生产实战指南
运维·人工智能·自动化·大模型·音视频·moneyprinter
難釋懷8 小时前
Nginx自签名-图形化工具 XCA
运维·nginx
运维栈记9 小时前
API Error: 400 Request body format invalid
linux·ai