美文网首页
ovn load balance功能

ovn load balance功能

作者: 分享放大价值 | 来源:发表于2021-05-31 08:46 被阅读0次

    本文实验ovn的load balance功能,在nbdb数据库中提供了Load_Balancer表,用来设置相关参数,每行代表一个load balancer。


    image.png

    vips指定vip及其endpoint,当load balance被设置到逻辑交换机时,vip必须和逻辑交换机在不同的网段。
    默认情况下,使用dp_hash值来选择endpoint,也可以通过设置selection_fields自定义计算hash。

    load balance可以被逻辑交换机和逻辑路由器引用。


    image.png image.png

    本次实验的逻辑拓扑


    image.png

    图中蓝色部分表示在ls1上的vm1和vm2上启动web服务,vip为10.10.10.22:8000。
    在ls2上创建lb规则,使ls2上的vm来可以访问此vip提供的服务。

    首先创建非蓝色部分的组件

    ###创建两个交换机和一个路由器
    //创建两个虚拟交换机 ls1 和 ls2
    ovn-nbctl ls-add ls1
    ovn-nbctl ls-add ls2
    //创建一个虚拟路由器 lr1
    ovn-nbctl lr-add lr1
    
    //在虚拟路由器 lr1 上添加端口,用来连接虚拟交换机 ls1
    ovn-nbctl lrp-add lr1 lr1-ls1 00:00:00:00:00:01 10.10.10.1/24
    
    //在虚拟交换机 ls1 上添加端口,用来连接虚拟路由器 lr1
    ovn-nbctl lsp-add ls1 ls1-lr1
    //端口类型必须为 router
    ovn-nbctl lsp-set-type ls1-lr1 router
    //设置地址,必须和 lr1-ls1 的一致
    ovn-nbctl lsp-set-addresses ls1-lr1 00:00:00:00:00:01
    //指定 router-port
    ovn-nbctl lsp-set-options ls1-lr1 router-port=lr1-ls1
    
    //在虚拟路由器 lr1 上添加端口,用来连接虚拟交换机 ls2
    ovn-nbctl lrp-add lr1 lr1-ls2 00:00:00:00:00:02 10.10.20.1/24
    
    //在虚拟交换机 ls2 上添加端口,用来连接虚拟路由器 lr1
    ovn-nbctl lsp-add ls2 ls2-lr1
    //端口类型必须为 router
    ovn-nbctl lsp-set-type ls2-lr1 router
    //设置地址,必须和 lr1-ls2 的一致
    ovn-nbctl lsp-set-addresses ls2-lr1 00:00:00:00:00:02
    //指定 router-port
    ovn-nbctl lsp-set-options ls2-lr1 router-port=lr1-ls2
    
    ###在交换机上添加vm接口
    //在虚拟交换机 ls1 上添加两个端口,指定 mac 和 ip(10.10.10.0/24网段),用来连接vm
    ovn-nbctl lsp-add ls1 ls1-vm1
    ovn-nbctl lsp-set-addresses ls1-vm1 "00:00:00:00:00:03 10.10.10.2"
    ovn-nbctl lsp-set-port-security ls1-vm1 "00:00:00:00:00:03 10.10.10.2"
    
    ovn-nbctl lsp-add ls1 ls1-vm2
    ovn-nbctl lsp-set-addresses ls1-vm2 "00:00:00:00:00:04 10.10.10.3"
    ovn-nbctl lsp-set-port-security ls1-vm2 "00:00:00:00:00:04 10.10.10.3"
    
    //在虚拟交换机 ls2 上添加两个端口,指定 mac 和 ip(10.10.20.0/24网段),用来连接vm
    ovn-nbctl lsp-add ls2 ls2-vm1
    ovn-nbctl lsp-set-addresses ls2-vm1 "00:00:00:00:00:03 10.10.20.2"
    ovn-nbctl lsp-set-port-security ls2-vm1 "00:00:00:00:00:03 10.10.20.2"
    
    ovn-nbctl lsp-add ls2 ls2-vm2
    ovn-nbctl lsp-set-addresses ls2-vm2 "00:00:00:00:00:04 10.10.20.3"
    ovn-nbctl lsp-set-port-security ls2-vm2 "00:00:00:00:00:04 10.10.20.3"
    
    ###创建四个vm
    //在 master 节点上,创建两个namespace,用来模拟两个vm,使用 "iface-id" 指定
    //这两个vm属于 ls1
    ip netns add vm1
    ovs-vsctl add-port br-int vm1 -- set interface vm1 type=internal
    ip link set vm1 netns vm1
    ip link set vm1 address 00:00:00:00:00:03
    ip netns exec vm1 ip addr add 10.10.10.2/24 dev vm1
    ip netns exec vm1 ip link set vm1 up
    ip netns exec vm1 ip route add default via 10.10.10.1 dev vm1
    ovs-vsctl set Interface vm1 external_ids:iface-id=ls1-vm1
    
    
    ip netns add vm2
    ovs-vsctl add-port br-int vm2 -- set interface vm2 type=internal
    ip link set vm2 netns vm2
    ip link set vm2 address 00:00:00:00:00:04
    ip netns exec vm2 ip addr add 10.10.10.3/24 dev vm2
    ip netns exec vm2 ip link set vm2 up
    ip netns exec vm2 ip route add default via 10.10.10.1 dev vm2
    ovs-vsctl set Interface vm2 external_ids:iface-id=ls1-vm2
    
    
    //在 node1 节点上,创建两个namespace,用来模拟两个vm,使用 "iface-id" 指定这两个vm属于 ls2
    ip netns add vm1
    ovs-vsctl add-port br-int vm1 -- set interface vm1 type=internal
    ip link set vm1 netns vm1
    ip link set vm1 address 00:00:00:00:00:03
    ip netns exec vm1 ip addr add 10.10.20.2/24 dev vm1
    ip netns exec vm1 ip link set vm1 up
    ip netns exec vm1 ip route add default via 10.10.20.1 dev vm1
    ovs-vsctl set Interface vm1 external_ids:iface-id=ls2-vm1
    
    ip netns add vm2
    ovs-vsctl add-port br-int vm2 -- set interface vm2 type=internal
    ip link set vm2 netns vm2
    ip link set vm2 address 00:00:00:00:00:04
    ip netns exec vm2 ip addr add 10.10.20.3/24 dev vm2
    ip netns exec vm2 ip link set vm2 up
    ip netns exec vm2 ip route add default via 10.10.20.1 dev vm2
    ovs-vsctl set Interface vm2 external_ids:iface-id=ls2-vm2
    

    在ls1上的vm1和vm2上分别启动web服务

    rm /tmp/www -rf
    mkdir -p /tmp/www
    echo "i am vm1" > /tmp/www/index.html
    cd /tmp/www
    ip netns exec vm1 python -m SimpleHTTPServer 8000
    
    rm /tmp/www1 -rf
    mkdir -p /tmp/www1
    echo "i am vm2" > /tmp/www1/index.html
    cd /tmp/www1
    ip netns exec vm2 python -m SimpleHTTPServer 8000
    

    创建lb规则,并添加到ls2上。ls2网段为10.10.20.0/24,vip为不同网段的10.10.10.22

    ovn-nbctl lb-add lb2 10.10.10.22:8000 "10.10.10.2:8000,10.10.10.3:8000" tcp
    ovn-nbctl ls-lb-add ls2 lb2
    
    root@master:~# ovn-nbctl ls-lb-list ls2
    UUID                                    LB                  PROTO      VIP                 IPs
    1caa32a5-05ab-47e2-bc84-3e8f1d74bef5    lb2                 tcp        10.10.10.22:8000    10.10.10.2:8000,10.10.10.3:8000
    

    在ls2上vm中访问此vip提供的服务,可看到返回的内容是变化的,说明load balance成功。

    root@node1:~# ip netns exec vm2 curl 10.10.10.22:8000
    i am vm1
    root@node1:~# ip netns exec vm2 curl 10.10.10.22:8000
    i am vm1
    root@node1:~# ip netns exec vm2 curl 10.10.10.22:8000
    i am vm2
    root@node1:~# ip netns exec vm2 curl 10.10.10.22:8000
    i am vm2
    

    可通过修改load balance的selection_fields为ip_src,这样只会根据源ip计算,这样同一个vm发出的报文只会发给同一个endpoint

    root@master:~# ovn-nbctl set load_balancer lb2 selection_fields=ip_src
    

    执行多次,结果都是一样的内容。

    root@node1:~# ip netns exec vm2 curl 10.10.10.22:8000
    i am vm1
    root@node1:~# ip netns exec vm2 curl 10.10.10.22:8000
    i am vm1
    root@node1:~# ip netns exec vm2 curl 10.10.10.22:8000
    i am vm1
    root@node1:~# ip netns exec vm2 curl 10.10.10.22:8000
    i am vm1
    root@node1:~# ip netns exec vm2 curl 10.10.10.22:8000
    i am vm1
    

    相关文章

      网友评论

          本文标题:ovn load balance功能

          本文链接:https://www.haomeiwen.com/subject/chapsltx.html