場景介紹
引入VPC的概念
DPVS社區最初設計的應用場景是IDC的經典網絡,并不適用于云化場景。云化場景與IDC經典網絡最核心的區別是:經典網絡提供的是多用戶共享的網絡,而VPC提供的是用戶專屬的網絡。VPC內用戶可以任意定義云主機的IP地址,而在經典網絡模式下,大家擠在一個二層網絡里面,IP地址首先要保證不能重合。
如上圖所示,VIP:PORT可以唯一表示一個服務,服務后面掛載了多個實例,但在云化場景下,其VIP地址是可以重復的,所以仍然使用VIP:PORT來表示一個具體服務就行不通了。因此DPVS-VXLAN轉發層面不能繼續沿用DPVS原有的處理邏輯,為了解決這個問題研發團隊引入了租戶VPC的概念,把服務和VPC關聯起來,
不同的VPC可以有相同的VIP:PORT,這也與實際使用方式相吻合,改造后就變成了VXLAN+VIP:PORT來表示一個服務
測試環境
驗證環境:vmware虛擬機,服務端centos5.10鏡像,DPVS端centos3.10鏡像
驗證目的:驗證dpvs支持VXLAN分支代碼功能
驗證過程:通過搭建DOCKER VXLAN網絡和DPVS-VXLAN軟件驗證流量轉發狀態是否正常
轉發路徑:client->dpvs->vxlan-docker->nginx-docker、
在VM2配置DOCKER VXLAN網絡和nginx軟件
docker pull nginx
docker network create --subnet 172.18.0.0/16 mynetwork
docker run -d \
--net mynetwork \
--ip 172.18.0.2 \
--restart always \
--name network \
-p 80:80 \
-v /opt/data/nginx:/etc/nginx \
-v /opt/log/nginx:/var/log/nginxo \
-v /opt/share/nginx/html:/usr/share/nginx/html \
nginx:latest
ip link add vxlan_dpvs type vxlan id 100 remote 192.168.209.172 local 192.168.209.165 dstport 4789 dev ens33
ip link set vxlan_dpvs up
ip -d link show vxlan_dpvs
brctl addif br-0187de5d38cb vxlan_dpvs
DPVS配置VXLAN隧道規則表
VIP=192.168.209.172
LIP=172.18.0.7
RS=172.18.0.2
# 將wan ip設置到dpdk0接口
./dpip addr add ${VIP}/32 dev dpdk0
# 添加服務<VIP:vport>用于轉發
./ipvsadm -A -t ${VIP}:80 -s rr
# 添加real server
./ipvsadm -a -t ${VIP}:80 -r ${RS} -b --vxlan local=192.168.209.171,remote=192.168.209.165,rport=4789,vni=100,mac=02:42:ac:12:00:02
# 添加local ipVXLAN
./ipvsadm --add-laddr -z ${LIP} -t ${VIP}:80 -F dpdk0
./dpip addr add 192.168.209.171/24 dev dpdk0
ifconfig dpdk0.kni 192.168.209.171 netmask 255.255.255.0
ipvsadm -ln
執行后可查看到規則
| IP Virtual Server version 0.0.0 (size=0) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.209.172:80 rr -> 172.18.0.2 FullNat 3 0 0 192.168.209.171-192.168.209.165:4789-100-02:42:ac:12:00:02 |
在Client端執行curl請求DPVS 的VIP可通