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网络通讯原理,谢谢观看。

相关推荐
姜太小白13 分钟前
【Linux】df -h 卡住问题的通用排查与解决方案总结
linux·运维·php
张忠琳19 分钟前
【NPU】Ascend Docker Runtime v26.0.1 之二 runtime/process/process.go — 超深度逐行分析
云原生·容器·架构·kubernetes·npu·docker-runtime
fengyehongWorld1 小时前
Linux 终端快捷键
linux·运维
hyf3266331 小时前
泛程序:从零开始搭建稳定程序项目框架
运维·服务器·爬虫·百度·seo
哎呦喂我去去去2 小时前
C#实现屏幕墙:同时监控多个电脑桌面(支持Windows、信创Linux、银河麒麟、统信UOS)
linux·windows·c#
为自己_带盐2 小时前
安敢越雷池一步?浅尝雷池WAF社区版
运维·web安全
NiceCloud喜云2 小时前
海外云服务器怎么选?适用场景、价格和避坑经验总结
运维·服务器
easy_coder3 小时前
Linux LVM 知识文档
linux·运维
小小的木头人4 小时前
Ubuntu 使用 udev + systemd + UUID 实现 USB 硬盘自动挂载
linux·运维·ubuntu
Kevin Wang7274 小时前
Nvidia-AGX-spark部署手册——课堂质量诊断(jetpack:r36)
python·docker·容器