在云网络中,VPC内资源和IDC可以通过专线打通,并采取多下一跳专线实现负载均衡的从来来保证业务的高可用性,业务模型如下:
在VPC网关上,到专线交换机配置的是多下一跳的等价路由,使用路由ECMP实现负载均衡,在IDC侧原理类似,这样,underlay的网络实际上是在VPC网关和IDC之间是ECMP的多下一跳路由,每一跳对应一条tunnel。专线交换机负责和VPC网关建立多条tunnel,vm访问IDC时,通过任意tunnel接收流量,发送的IDC。IDC访问vm时,选择一条tunnel来封装vxlan报文,送往VPC网关。
在开发测试过程中,可以用ovs和net namespace模拟上述场景。
配置步骤:
netns相关配置
ip link add dc-port type veth peer name tap-port
ip link set dev dc-port up
ip netns add dc-port
ip link set tap-port netns dc-port
ip netns exec dc-port ip link set dev lo up
ip netns exec dc-port ip link set dev tap-port up
ip netns exec dc-port ip link set dev tap-port address 10:5e:00:01:02:03
ip netns exec dc-port ip addr add 192.1.0/30 dev tap-port
ip netns exec dc-port ip addr add 192.10.1.30 dev lo
ip netns exec dc-port ip route add default via 10.24.107.20 dev tap-port src 192.10.1.30
ip netns exec dc-port ip neigh add 10.24.107.20 dev tap-port lladdr 20:5e:00:01:02:03
ovs流表配置
相关的bf-int以及vxlan口配置是常规配置,这里不在单独列出,主要列出实现外部流量进入ovs后如何将多个tunnel的流量交由一个nenns处理,以及从nentns收到的流量如何ecmp到不通的tunnel上涉及到的配置
ovs从外部接口接收流量,将不通tunnel的流量都解封装,送往dc-port,有dc-port通过veth-peer送到netns内部的tap-port口,
ovs-ofctl add-flow br-int -O openflow15 "table=0,priority=2000,in_port=vxlan1,tun_id=204905,tun_src=10.24.127.20, actions=output:dc-port"
ovs-ofctl add-flow br-int -O openflow15 "table=0,priority=2000,in_port=vxlan1,tun_id=205905,tun_src=10.24.127.20, actions=output:dc-port"
ovs发送出去的流量,需要配置group实现流量的ecmp,这是配置一条流表规则,将从dc-port收到的流量送到group中,而在group中配置hash模式,并增加连个bucket,分别封装不同的underlay vxlan信息,实现出向在多个tunnel上的ecmp
ovs-ofctl add-flow br-int -O openflow15 "table=0,priority=100,in_port=dc-port actions=group:1"
ovs-ofctl add-group br-int -O openflow15 "group_id=1,type=select,selection_method=hash,fields(ip_src,ip_dst),bucket=weight:100,actions=set_field:204905->tun_id,set_field:10.24.107.20->tun_dst,output:vxlan1,bucket=weight:100,actions=set_field:205905->tun_id,set_field:10.24.107.20->tun_dst,output:vxlan1