tnblog
首页
视频
资源
登录

Flannel UDP模式

6233人阅读 2022/12/12 14:25 总访问:3467004 评论:0 收藏:0 手机
分类: 容器编排

Flannel UDP模式

Tap与Tun设备


tap/tun 提供了一台主机内用户空间的数据传输机制。
不同是一个处理二层一个处理三层。
更多可参考以往文章:https://www.tnblog.net/hb/article/details/7233#TAP%E4%B8%8ETUN%E8%AE%BE%E5%A4%87

Tun设备应用举例

Flannel UDP 模式原理


UDP模式下flanneld进程在启动时会通过打开/dev/net/tun的方式生成一个TUN设备(也就是我们的flannel0),TUN设备可以简单理解为Linux当中提供的一种内核网络与用户空间(应用程序)通信的一种机制,TUN设备的特殊性在于它可把数据包转给创建它的用户空间进程,从而实现内核到用户空间的拷贝。即可通过直接读取tun设备的方式收发RAW IP包。

  1. netstat -ulnp | grep flanneld

首先安装Flannel UDP


修改kube-flannel.yaml文件中的net.confBackend.Typeudp,关于UDP模式默认的Port为8285,如果想更改为其他的Port仍然可以通过Backend.Port参数来进行修改。

  1. net-conf.json: |
  2. {
  3. "Network": "10.244.0.0/16",
  4. "Backend": {
  5. "Type": "udp"
  6. }
  7. }
  1. kubectl delete -f kube-flannel.yaml
  2. kubectl apply -f kube-flannel.yaml


然后我们运行三个pod,进行不同节点上的pod进行ping,这里我们以c1和c3为例子。


我们首先尝试一下是否能够ping得通,发现是没问题的。

  1. kubectl exec pod/c1 -- ping 192.168.2.40

我们ping的时候,源IP与目的IP不变,中间MAC每隔一跳就变一次,可通过tcpdump -pne -i cni0 icmp尝试抓包。


接着我们需要查路由表了,如果要访问192.168.2.40网络应该从第二条路由出去到主机网络名称空间下,

  1. kubectl exec pod/c1 -- route -n


接着我们再次查询node1节点的路由表,发现它的网关下一跳为0.0.0.0,从接口flannel0出去,而flannel0是由我们的flanneld创建的tun设备。


如何知道flannel0是一个tun设备呢?我们再通过ip -d link show flannel0命令查看,是有一个tun标志的。


由于是tun设备那么是不需要mac地址的,因为两端是直连的,我们可以通过下面的命令抓包查看。

  1. tcpdump -pne -i flannel0


然后数据包从内核空间copy到我们?户空间的flanneld上去。
由于flanneld进程会采?UDP来分装原始的ping包(ICMP包),所以会在其原始数据包外层再加上?层数据头。

问题一


数据报?交给flanneld进程,此时他需要指导内核去安装?定的数据形式,这?是UDP Mode来做数据包的封装。这?涉及?个问题,就是如何获取?

?的Pod所在的?的Node。因为封装的?的就是想要数据包的IP头能在外部的交换或是路由设备上进程数据转发。
flanneld在启动时会将该节点的?络信息通过api-server保存到etcd当中,故在发送报?时可以通过查询etcd得到192.168.2.40这个Pod的IP属于10.211.55.9该Node2。
所以在数据包在即将被封装的时候,这?就获取到了四元组信息:

  1. S_IP 10.211.55.8 D_IP 10.211.55.9
  2. S_MAC00:1c:42:fd:68:ff D_MAC: 00:1c:42:ad:be:97

问题二


这?还有?个Note:对于flanneld是如何知道采?哪?张宿主机上的?卡进?封装外层IP的呢?

1.通常是以默认路由的地址来作为缺省封装的外层地址。
2.也可以指定。
此时数据包就可以被转发出去了。


我们可以通过抓包的方式进行查看。

  1. tcpdump -pne -i eth0 -w eth0_udp.cap


打开鲨鱼,我们先将UDP的包转换成IPv4的格式,这样就能查看到完整的包了。


现在已经看到flanneld封装完整的包,现在我们知道要发往的是10.211.55.9这个地址,走的就是第二条路由出去。
然后到达节点二后又通过进入内核,从tun出去到flanneld进行解开包,然后再查询node2的路由表到达cni0,最后到达c3 pod节点。


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

ServiceStack.Redis操作Redis配置单例模式

我携漫天星辰以赠你,仍觉漫天星辰不如你。单利的应该是连接池而不应该是redis对象。如果每次操作都是一个redis对象是会有...

GIT中的PR模式

GIT中的Pull Request模式(简称PR)PR是开发者使用Github进行协作的利器。PR是协作者修改代码后或在原基础上增加新代码后向...

EF三种模式解析

万般皆下品,惟有编程高我希望你是为我而来如果我爱你,而你也正巧爱我。你头发乱了时候,我会笑笑地替你拨一拨,然后,手...

identity server4 的授权模式

授权模式OAuth2.0 定义了四种授权模式:Implicit:简化模式;直接通过浏览器的链接跳转申请令牌。Client Credentials:客户...

identity server4 四种授权模式

爱情哪有那么复杂,能让你开开心心笑得最甜的那个人就是对的人下面介绍4种模式安全性从低到高客户端模式客户端模式只对客户...

IdentityServer4实现OAuth2.0四种模式之授权码模式

授权码模式隐藏码模式最大不同是授权码模式不直接返回token,而是先返回一个授权码,然后再根据这个授权码去请求token。这...

也谈TDD,以及三层架构、设计模式、ORM……

想在园子里写点东西已经很久了,但一直没有落笔,还有些软文做推广,还要做奶爸带孩子,还要……好吧,我承认,真正的原因...

.netcore 3.1 MediatR:轻松实现命令查询职责分离模式(CQRS)

.netcore 3.1 MediatR:轻松实现命令查询职责分离模式(CQRS)[TOC] 中介者模式 用一个中介对象封装一系列的对象交...

.net core 3.1 Identity Server4 (ClientCredentials模式)

.net core 3.1 Identity Server4 (ClientCredentials模式)[TOC] ClientCredentials 模式的理解 在这之前我先问大家...

.net core 3.1 Identity Server4 (Password模式)

.net core 3.1 Identity Server4 (Password模式)[TOC] Password 模式的理解 当应用程序将用户的用户名和密码交换为...

.net core 3.1 Identity Server4 (Code模式)

.net core 3.1 Identity Server4 (Code模式)[TOC] Code 模式的理解 大致说一下,这种授权模式的意义。A. 用户通...

Go Map与工厂模式,在Go语言中实现Set

Go Map与工厂模式,在Go语言中实现Set[TOC] Map与工厂模式 Map 的 value 可以是一个方法与 Go 的 Dock type 接口方式一起...

.net core 3.1 Identity Server4 (Implicit模式)

.net core 3.1 Identity Server4 (Implicit模式)[TOC] Implicit 模式的理解 A.用户通过浏览器访问客户端,然后客...

.net core 3.1 Identity Server4 (Hybrid模式)

.net core 3.1 Identity Server4 (Hybrid模式)[TOC] Hybrid 模式的理解 Hybrid 模式相当于(Code模式+Impact模式),所...

.net core 3.1 Identity Server4 (自定义模式)

.net core 3.1 Identity Server4 (自定义模式)[TOC] IdentityServer4除了提供常规的几种授权模式外(AuthorizationCod...
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术