Chinaunix首页 | 论坛 | 博客
  • 博客访问: 416139
  • 博文数量: 707
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 6000
  • 用 户 组: 普通用户
  • 注册时间: 2022-03-07 15:28
个人简介

天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。

文章分类

全部博文(707)

文章存档

2025年(14)

2024年(244)

2023年(247)

2022年(202)

我的朋友

分类: 虚拟化

2025-01-17 12:04:49

本文分享自天翼云开发者社区《nginx适配Overlay以及测试工具》,作者:pan


OverlayUnderlay介绍

Overlay网络和Underlay网络是一组相对概念,Overlay网络是建立在Underlay网络上的逻辑网络。而Overlay网络是通过网络虚拟化技术,在同一张Underlay网络上构建出的一张或者多张虚拟的逻辑网络,如下图所示。

详细资料可查看https://zhuanlan.zhihu.com/p/436605135

ELB使用的技术方案

天翼云ELB使用VXLAN隔离,需要进行VXLAN的解析与封装。VXLAN技术是一种大二层的虚拟网络技术,主要原理是引入一个UDP格式的外层隧道作为数据链路层,而原有数据报文内容作为隧道净荷加以传输。

ELB使用dpvs以及nginx7httphttps的代理以及分发。报文流向为客户端(内网或者公网)->ELB(内部为dpvs->nginx->RS(真正的http服务端)。因为ELBRS处于同一VXLAN中,那么nginx转发的报文就需要封装VXLAN,又因为RS需要知道真实的客户端IPnginx也需要获取客户端IP并转发的时候增加X-Forwarded-For

dpvs收到报文会解析VXLAN,同时转发到nginx,因为dpvs采用FULLNAT的模式,nginx如果要获取真实ip,二者之间采用了Proxy ProtocolProxy protocol,是一个Internet协议,通过为tcp添加一个很小的头信息,来方便的传递客户端信息(协议栈、源IP、目的IP、源端口、目的端口等)。因为nginx还需要知道VXLANid,对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,测试结果如图:


阅读(20) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~