首页
视频
资源
登录
原
Flannel UDP模式
5294
人阅读
2022/12/12 14:25
总访问:
2993923
评论:
0
收藏:
0
手机
分类:
容器编排
![](https://img.tnblog.net/arcimg/hb/a7b81907f2e249d0a1ca79b4c0726515.png) ># Flannel UDP模式 [TOC] ## Tap与Tun设备 tn2>tap/tun 提供了一台主机内用户空间的数据传输机制。 不同是一个处理二层一个处理三层。 更多可参考以往文章:https://www.tnblog.net/hb/article/details/7233#TAP%E4%B8%8ETUN%E8%AE%BE%E5%A4%87 ![](https://img.tnblog.net/arcimg/hb/754344bf143e4534ab334a4aac4d77bb.png) ## Tun设备应用举例 ![](https://img.tnblog.net/arcimg/hb/0f61f65af988461ba9e2f938c1bcb843.png) ## Flannel UDP 模式原理 tn2>UDP模式下flanneld进程在启动时会通过打开`/dev/net/tun`的方式生成一个TUN设备(也就是我们的`flannel0`),TUN设备可以简单理解为Linux当中提供的一种内核网络与用户空间(应用程序)通信的一种机制,TUN设备的特殊性在于它可把数据包转给创建它的用户空间进程,从而实现内核到用户空间的拷贝。即可通过直接读取tun设备的方式收发RAW IP包。 ![](https://img.tnblog.net/arcimg/hb/d6af9577128d4e85b72ee9ea3225d332.png) ![](https://img.tnblog.net/arcimg/hb/f33bf1e2fc4a495c9d193825fb681ec5.png) ```bash netstat -ulnp | grep flanneld ``` ![](https://img.tnblog.net/arcimg/hb/58181448f5584d41b63d98f1e9301b78.png) ## 首先安装Flannel UDP tn2>修改`kube-flannel.yaml`文件中的`net.conf`的`Backend.Type`为`udp`,关于UDP模式默认的Port为`8285`,如果想更改为其他的Port仍然可以通过`Backend.Port`参数来进行修改。 ```bash net-conf.json: | { "Network": "10.244.0.0/16", "Backend": { "Type": "udp" } } ``` ```bash kubectl delete -f kube-flannel.yaml kubectl apply -f kube-flannel.yaml ``` tn2>然后我们运行三个pod,进行不同节点上的pod进行ping,这里我们以c1和c3为例子。 ![](https://img.tnblog.net/arcimg/hb/d6940295b6dd47ba95fa5d2cd97ca829.png) tn2>我们首先尝试一下是否能够ping得通,发现是没问题的。 ```bash kubectl exec pod/c1 -- ping 192.168.2.40 ``` ![](https://img.tnblog.net/arcimg/hb/14bf562827bc425c873811fedadd6442.png) tn>我们ping的时候,源IP与目的IP不变,中间MAC每隔一跳就变一次,可通过`tcpdump -pne -i cni0 icmp`尝试抓包。 tn2>接着我们需要查路由表了,如果要访问`192.168.2.40`网络应该从第二条路由出去到主机网络名称空间下, ```bash kubectl exec pod/c1 -- route -n ``` ![](https://img.tnblog.net/arcimg/hb/66258e2e4cf74b2fa73504ffbe3fe12b.png) tn2>接着我们再次查询node1节点的路由表,发现它的网关下一跳为`0.0.0.0`,从接口`flannel0`出去,而`flannel0`是由我们的`flanneld`创建的tun设备。 ![](https://img.tnblog.net/arcimg/hb/5be912f10a1147bf83f4023b5a1bd2b3.png) tn2>如何知道`flannel0`是一个tun设备呢?我们再通过`ip -d link show flannel0`命令查看,是有一个`tun`标志的。 ![](https://img.tnblog.net/arcimg/hb/7ec2e3416ab24a71b9d148e0b51d3cee.png) tn2>由于是`tun`设备那么是不需要mac地址的,因为两端是直连的,我们可以通过下面的命令抓包查看。 ```bash tcpdump -pne -i flannel0 ``` ![](https://img.tnblog.net/arcimg/hb/99d5abda648a4d7cb09c123a94e838a3.png) tn2>然后数据包从内核空间copy到我们?户空间的flanneld上去。 由于flanneld进程会采?UDP来分装原始的ping包(ICMP包),所以会在其原始数据包外层再加上?层数据头。 >### 问题一 tn2>数据报?交给flanneld进程,此时他需要指导内核去安装?定的数据形式,这?是UDP Mode来做数据包的封装。这?涉及?个问题,就是如何获取? tn>?的Pod所在的?的Node。因为封装的?的就是想要数据包的IP头能在外部的交换或是路由设备上进程数据转发。 flanneld在启动时会将该节点的?络信息通过api-server保存到etcd当中,故在发送报?时可以通过查询etcd得到192.168.2.40这个Pod的IP属于10.211.55.9该Node2。 所以在数据包在即将被封装的时候,这?就获取到了四元组信息: ```bash S_IP: 10.211.55.8 D_IP: 10.211.55.9 S_MAC:00:1c:42:fd:68:ff D_MAC: 00:1c:42:ad:be:97 ``` >### 问题二 tn2>这?还有?个Note:对于flanneld是如何知道采?哪?张宿主机上的?卡进?封装外层IP的呢? tn>1.通常是以默认路由的地址来作为缺省封装的外层地址。 2.也可以指定。 此时数据包就可以被转发出去了。 tn2>我们可以通过抓包的方式进行查看。 ```bash tcpdump -pne -i eth0 -w eth0_udp.cap ``` ![](https://img.tnblog.net/arcimg/hb/d14e590cc3ae4851a23460fd775eda26.png) tn2>打开鲨鱼,我们先将UDP的包转换成IPv4的格式,这样就能查看到完整的包了。 ![](https://img.tnblog.net/arcimg/hb/241d2a8529384309902d680cf8a5b8a0.png) ![](https://img.tnblog.net/arcimg/hb/2e11fd1eb34c4e29b07641a94646865b.png) ![](https://img.tnblog.net/arcimg/hb/ca0e775b085347c5ad761f0a4f3d1af5.png) tn2>现在已经看到flanneld封装完整的包,现在我们知道要发往的是`10.211.55.9`这个地址,走的就是第二条路由出去。 然后到达节点二后又通过进入内核,从tun出去到flanneld进行解开包,然后再查询node2的路由表到达cni0,最后到达c3 pod节点。
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}
尘叶心繁
这一世以无限游戏为使命!
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.net后台框架
178篇
linux
18篇
linux中cve
1篇
windows中cve
0篇
资源分享
10篇
Win32
3篇
前端
28篇
传说中的c
5篇
Xamarin
9篇
docker
15篇
容器编排
101篇
grpc
4篇
Go
15篇
yaml模板
1篇
理论
2篇
更多
Sqlserver
4篇
云产品
39篇
git
3篇
Unity
1篇
考证
2篇
RabbitMq
23篇
Harbor
1篇
Ansible
8篇
Jenkins
17篇
Vue
1篇
Ids4
18篇
istio
1篇
架构
2篇
网络
7篇
windbg
4篇
AI
19篇
threejs
2篇
人物
1篇
嵌入式
20篇
python
20篇
HuggingFace
8篇
pytorch
10篇
opencv
6篇
Halcon
5篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术