手动模拟 flannel 的 vxlan 实现节点命名空间互通

红米2年前技术文章826

WX20231218-094418@2x.png

flannel网络插件中实现两个节点互通方式有host-gw vxlan ipip等方式,之前已经手动模拟过host-gw模式,此处再模拟一下vxlan模式点对点访问。

手动实验两个命名空间通信

Node1节点操作

  1. 创建vxlan的模式的虚拟设备,设备名vxlan11,网络表示符为32UDP端口为4787,远程访问地址192.168.209.130,本机地址192.168.209.144,底层设备ens33,并给vxlan设备一个隧道ip,并启动

ip link add vxlan32 type vxlan id 32 dstport 4787 remote 192.168.209.144 local 192.168.209.130  dev ens33
ip addr add 10.244.1.0/32 dev vxlan32
ip link set vxlan32 up
  1. 创建网桥并启动,并且给网桥一个网关地址,并启动虚拟网桥设备

ip link add br1 type bridge
ip addr add 10.244.1.1/24 dev br1
ip link set br1 up
  1. 创建命名空间并且创建虚拟地址对实现对端绑定

ip netns add ns1
ip link add veth-ns1 type veth peer name veth-br1
ip link set veth-ns1 netns ns1 
ip netns exec ns1 ip address add 10.244.1.2/24 dev veth-ns1
ip netns exec ns1 ip link set veth-ns1 up
ip link set veth-br1 master br1 
ip link set veth-br1 up
  1. 创建命名空间出去的路由,创建流量从隧道出去的路由

ip r a 10.244.2.0/24 via 10.244.2.0 dev vxlan32 onlink
ip netns exec ns1 ip route add 10.244.2.0/24 via 10.244.1.1 dev veth-ns1
  1. 内核开启路由转发,路由转发意思是节点内不同设备之间允许路由转发

sysctl -w net.ipv4.ip_forward=1

Node2节点操作

在节点二创建vxlan虚拟设备

ip link add vxlan32 type vxlan id 32 dstport 4787 remote 192.168.209.130 local 192.168.209.144  dev ens33
ip addr add 10.244.2.0/32 dev vxlan32
ip link set vxlan32 up
  1. 创建网桥并启动,并且给网桥一个网关地址,并启动虚拟网桥设备

ip link add br2 type bridge
ip addr add 10.244.2.1/24 dev br2
ip link set br2 up
  1. 创建命名空间并且创建虚拟地址对实现对端绑定

ip netns add ns2
ip link add veth-ns2 type veth peer name veth-br2
ip link set veth-ns2 netns ns2 
ip netns exec ns2 ip address add 10.244.2.2/24 dev veth-ns2
ip netns exec ns2 ip link set veth-ns2 up
ip link set veth-br2 master br2
ip link set veth-br2 up
  1. 创建命名空间出去的路由,创建流量从隧道出去的路由

ip r a 10.244.1.0/24 via 10.244.1.0 dev vxlan32 onlink
ip netns exec ns2 ip route add 10.244.1.0/24 via 10.244.2.1 dev veth-ns2
  1. 内核开启路由转发

sysctl -w net.ipv4.ip_forward=1

测试连通性

节点1访问节点2vxlan设备

[root@ns1 ~]# ping 10.244.2.0PING 10.244.2.0 (10.244.2.0) 56(84) bytes of data.64 bytes from 10.244.2.0: icmp_seq=1 ttl=64 time=0.223 ms64 bytes from 10.244.2.0: icmp_seq=2 ttl=64 time=0.301 ms

节点1命名空间访问节点2命名空间

[root@ns1 ~]# ip netns exec ns1 ping 10.244.2.2PING 10.244.2.2 (10.244.2.2) 56(84) bytes of data.64 bytes from 10.244.2.2: icmp_seq=1 ttl=62 time=0.216 ms

数据包分析

Node1下命名空间ns1访问Node2下命名空间ns2,分析数据过经过各个设备mac地址之间关系

Node1 br1 网桥数据分析

10.244.1.2Node1命名空间下IP10.244.2.2Node2命名空间下IP10.244.2.2mac地址变成了br1网桥mac,这符合网络地址转换原则

001.png

Node1 vxlan 设备数据分析

10.244.1.2mac地址变成了本端vxlan设备mac10.244.2.2mac地址也变成了对端vxlan设备mac

002.png

Node1 物理网口数据分析

在物理口发现没有xvlan设备的信息,只有本端口发送给对端的UDP协议数据,经过解码数据包,发现数据包报头被封装成了vxlan格式

003.png

Node2 vxlan 设备数据分析

数据包在到达对端的物理网口后会解包,根据vxlanvni解析到需要发送给vxlan32设备,并且发现mac也都是vxlan设备mac,此时证明隧道成立

004.png

FAQ

1、为什么要先建立vxlan设备?

可以后建立vxlan设备,但是这里用的是32位主机地址10.244.1.0,经测试发现主机地址与网桥下的10.244.1.0/24端有冲突,所以需要先行创建,如果使用10.244.3.0这种不同网段的则可以后创建网桥,经过分析发现flannel也是先创建vxlan设备

2、为什么是UDP封包?

经过分析发现TCP也可以进行封包,但是TCP需要握手,导致性能低。

3、如果有3台机器走点对点是不是很麻烦?

如果有多台机器,可以走多播模式


相关文章

MySQL运维实战之备份和恢复(8.9)xtrabackup备份指定表

备份部分表如果实例设置了参数innodb_file_per_table,xtrabackup可以备份部分表。通过--tables,--tables-file,--databases,--databas...

数据湖技术之iceberg(十)Structured Streaming实时写入Iceberg

数据湖技术之iceberg(十)Structured Streaming实时写入Iceberg

目前Spark中Structured Streaming只支持实时向Iceberg中写入数据,不支持实时从Iceberg中读取数据,下面案例我们将使用Structured Streaming从Kafk...

oracle11g db打补丁

1 升级opatch升级的方式就是解压安装包到ORACLE_HOME即可。oracle下执行Plain Text复制代码su - oracle1.备份原opatchcd $ORACLE_HOMEmv...

Go 日志处理

Go 日志处理

1、背景日志文件一般用于记录操作系统或其他软件运行时发生的事件,或通信软件不同用户之间的消息。如果有一些问题需要对程序进行调试或故障排查时,日志是必不可少的,这是我们分析程序问题常用的手段。2、操作前...

PG体系结构(一)

PG体系结构(一)

一、进程结构PG数据库启动时会先启动一个主进程(9.3之前称为postmaster,9.3以后称为postgres server process),然后fork出一些辅助子进程(backend、bac...

Doris集群部署

一、部署Doris集群1.部署doris服务(1)下载Doris            登陆地址https://doris.apache.org/download            选择需要下载的...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。