诈知 发表于 2025-6-9 15:57:31

nginx适配Overlay以及测试工具

本文分享自天翼云开发者社区《nginx适配Overlay以及测试工具》,作者:pan
 
Overlay与Underlay介绍
Overlay网络和Underlay网络是一组相对概念,Overlay网络是建立在Underlay网络上的逻辑网络。而Overlay网络是通过网络虚拟化技术,在同一张Underlay网络上构建出的一张或者多张虚拟的逻辑网络,如下图所示。
详细资料可查看https://zhuanlan.zhihu.com/p/436605135 

 
ELB使用的技术方案
天翼云ELB使用VXLAN隔离,需要进行VXLAN的解析与封装。VXLAN技术是一种大二层的虚拟网络技术,主要原理是引入一个UDP格式的外层隧道作为数据链路层,而原有数据报文内容作为隧道净荷加以传输。
ELB使用dpvs以及nginx做7层http和https的代理以及分发。报文流向为客户端(内网或者公网)->ELB(内部为dpvs->nginx)->RS(真正的http服务端)。因为ELB和RS处于同一VXLAN中,那么nginx转发的报文就需要封装VXLAN,又因为RS需要知道真实的客户端IP,nginx也需要获取客户端IP并转发的时候增加X-Forwarded-For。
dpvs收到报文会解析VXLAN,同时转发到nginx,因为dpvs采用FULLNAT的模式,nginx如果要获取真实ip,二者之间采用了Proxy Protocol。Proxy protocol,是一个Internet协议,通过为tcp添加一个很小的头信息,来方便的传递客户端信息(协议栈、源IP、目的IP、源端口、目的端口等)。因为nginx还需要知道VXLAN的id,对Proxy Protocol进行了改造,增加了vni字段,如下图。 
 
nginx就需要在原生代码基础上,增加vni字段的读取。同时连接upstream时,因为需要封装vni,通过SO_BINDTODEVICE绑定到具体网卡,完成VXLAN封装。
 
如何测试
因为相比Proxy Protocol多一个字段,通过curl无法自测,通过一个python工具来测试,源码为https://github.com/codejudas/py-proxy-protocol/。但是需要修改,增加一个vni字段,在代码中涉及vni的地方均添加字段即可,如下图。 

然后修改测试下面的socket.py,测试结果如图:

 
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

洪势 发表于 2025-11-24 04:32:25

不错,里面软件多更新就更好了

赏勿 发表于 2025-12-14 10:58:55

感谢分享,下载保存了,貌似很强大

腥狩频 发表于 2025-12-16 09:58:56

用心讨论,共获提升!

挡缭 发表于 2025-12-31 09:06:56

感谢分享,学习下。

遇玷 发表于 2026-1-1 08:14:28

收藏一下   不知道什么时候能用到

官厌 发表于 2026-1-2 21:25:18

谢谢分享,辛苦了

柄利 发表于 2026-1-9 19:01:22

很好很强大我过来先占个楼 待编辑

莠畅缕 发表于 2026-1-18 07:10:06

yyds。多谢分享

溶绚 发表于 2026-1-20 00:43:22

谢谢分享,试用一下

赙浦 发表于 2026-1-21 10:02:16

新版吗?好像是停更了吧。

羔迪 发表于 2026-1-21 20:48:11

这个好,看起来很实用

方子楠 发表于 2026-1-28 06:18:31

谢谢分享,试用一下

呼延含玉 发表于 2026-2-1 23:01:25

东西不错很实用谢谢分享

祉遛吾 发表于 2026-2-5 04:29:04

感谢分享,下载保存了,貌似很强大

判涔 发表于 2026-2-7 04:20:12

用心讨论,共获提升!

凶契帽 发表于 2026-2-8 12:02:01

谢谢楼主提供!

敛饺乖 发表于 2026-2-8 22:40:56

东西不错很实用谢谢分享

赏勿 发表于 2026-2-9 03:38:38

收藏一下   不知道什么时候能用到

琦谓 发表于 2026-2-12 18:21:04

收藏一下   不知道什么时候能用到
页: [1] 2
查看完整版本: nginx适配Overlay以及测试工具