博客專欄

EEPW首頁 > 博客 > nginx適配Overlay以及測試工具

nginx適配Overlay以及測試工具

發(fā)布人:天翼云開發(fā)者 時間:2025-01-17 來源:工程師 發(fā)布文章

本文分享自天翼云開發(fā)者社區(qū)《nginx適配Overlay以及測試工具》,作者:pan

 

Overlay與Underlay介紹

Overlay網(wǎng)絡(luò)和Underlay網(wǎng)絡(luò)是一組相對概念,Overlay網(wǎng)絡(luò)是建立在Underlay網(wǎng)絡(luò)上的邏輯網(wǎng)絡(luò)。而Overlay網(wǎng)絡(luò)是通過網(wǎng)絡(luò)虛擬化技術(shù),在同一張Underlay網(wǎng)絡(luò)上構(gòu)建出的一張或者多張?zhí)摂M的邏輯網(wǎng)絡(luò),如下圖所示。

詳細(xì)資料可查看https://zhuanlan.zhihu.com/p/43660513511.jpg


ELB使用的技術(shù)方案

天翼云ELB使用VXLAN隔離,需要進(jìn)行VXLAN的解析與封裝。VXLAN技術(shù)是一種大二層的虛擬網(wǎng)絡(luò)技術(shù),主要原理是引入一個UDP格式的外層隧道作為數(shù)據(jù)鏈路層,而原有數(shù)據(jù)報文內(nèi)容作為隧道凈荷加以傳輸。

ELB使用dpvs以及nginx做7層http和https的代理以及分發(fā)。報文流向為客戶端(內(nèi)網(wǎng)或者公網(wǎng))->ELB(內(nèi)部為dpvs->nginx)->RS(真正的http服務(wù)端)。因為ELB和RS處于同一VXLAN中,那么nginx轉(zhuǎn)發(fā)的報文就需要封裝VXLAN,又因為RS需要知道真實(shí)的客戶端IP,nginx也需要獲取客戶端IP并轉(zhuǎn)發(fā)的時候增加X-Forwarded-For。

dpvs收到報文會解析VXLAN,同時轉(zhuǎn)發(fā)到nginx,因為dpvs采用FULLNAT的模式,nginx如果要獲取真實(shí)ip,二者之間采用了Proxy Protocol。Proxy protocol,是一個Internet協(xié)議,通過為tcp添加一個很小的頭信息,來方便的傳遞客戶端信息(協(xié)議棧、源IP、目的IP、源端口、目的端口等)。因為nginx還需要知道VXLAN的id,對Proxy Protocol進(jìn)行了改造,增加了vni字段,如下圖。 12.jpgnginx就需要在原生代碼基礎(chǔ)上,增加vni字段的讀取。同時連接upstream時,因為需要封裝vni,通過SO_BINDTODEVICE綁定到具體網(wǎng)卡,完成VXLAN封裝。

 

如何測試

因為相比Proxy Protocol多一個字段,通過curl無法自測,通過一個python工具來測試,源碼為https://github.com/codejudas/py-proxy-protocol/。但是需要修改,增加一個vni字段,在代碼中涉及vni的地方均添加字段即可,如下圖。13.jpg 然后修改測試下面的socket.py,測試結(jié)果如圖: 14.jpg 

*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。



關(guān)鍵詞: nginx 虛擬化

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉