nginx適配Overlay以及測試工具
本文分享自天翼云開(kāi)發(fā)者社區《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ò )是通過(guò)網(wǎng)絡(luò )虛擬化技術(shù),在同一張Underlay網(wǎng)絡(luò )上構建出的一張或者多張虛擬的邏輯網(wǎng)絡(luò ),如下圖所示。
詳細資料可查看https://zhuanlan.zhihu.com/p/436605135
ELB使用的技術(shù)方案
天翼云ELB使用VXLAN隔離,需要進(jìn)行VXLAN的解析與封裝。VXLAN技術(shù)是一種大二層的虛擬網(wǎng)絡(luò )技術(shù),主要原理是引入一個(gè)UDP格式的外層隧道作為數據鏈路層,而原有數據報文內容作為隧道凈荷加以傳輸。
ELB使用dpvs以及nginx做7層http和https的代理以及分發(fā)。報文流向為客戶(hù)端(內網(wǎng)或者公網(wǎng))->ELB(內部為dpvs->nginx)->RS(真正的http服務(wù)端)。因為ELB和RS處于同一VXLAN中,那么nginx轉發(fā)的報文就需要封裝VXLAN,又因為RS需要知道真實(shí)的客戶(hù)端IP,nginx也需要獲取客戶(hù)端IP并轉發(fā)的時(shí)候增加X(jué)-Forwarded-For。
dpvs收到報文會(huì )解析VXLAN,同時(shí)轉發(fā)到nginx,因為dpvs采用FULLNAT的模式,nginx如果要獲取真實(shí)ip,二者之間采用了Proxy Protocol。Proxy protocol,是一個(gè)Internet協(xié)議,通過(guò)為tcp添加一個(gè)很小的頭信息,來(lái)方便的傳遞客戶(hù)端信息(協(xié)議棧、源IP、目的IP、源端口、目的端口等)。因為nginx還需要知道VXLAN的id,對Proxy Protocol進(jìn)行了改造,增加了vni字段,如下圖。 nginx就需要在原生代碼基礎上,增加vni字段的讀取。同時(shí)連接upstream時(shí),因為需要封裝vni,通過(guò)SO_BINDTODEVICE綁定到具體網(wǎng)卡,完成VXLAN封裝。
如何測試
因為相比Proxy Protocol多一個(gè)字段,通過(guò)curl無(wú)法自測,通過(guò)一個(gè)python工具來(lái)測試,源碼為https://github.com/codejudas/py-proxy-protocol/。但是需要修改,增加一個(gè)vni字段,在代碼中涉及vni的地方均添加字段即可,如下圖。 然后修改測試下面的socket.py,測試結果如圖:
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。