• Ubuntu 20.04 上学习Open vSwitch :VxLAN


    参考
    OpenvSwitch完全使用手册
    云计算底层技术-使用openvswitch
    Open vSwitch 概述;OVS支持的功能;ovs的模块介绍(ovs-vswitchd、ovsdb-server等等

    学习环境

    学习 OpenStack

    2 个 Hyper-V 虚拟机

    1. Ubuntu 20.04
      203.0.113.101 /24 ( 网关:203.0.113.1 )

    2. Ubuntu 20.04
      203.0.113.103 /24 ( 网关:203.0.113.1 )

    本文目的只在理解 Open vSwitch ,不在配置OpenStack
    逻辑拓扑图
    在这里插入图片描述

    安装 openvswitch-switch

    1. 先看 OpenStacj 文档
      OVN Manual install & Configuration

      摘录 Ubuntu 相关部分:

      Ubuntu/Debian includes ovn-central, ovn-host, ovn-docker, and ovn-common packages that pull in the appropriate Open vSwitch dependencies as needed.

    2. 再看 Open vSwaitch 文档

      Distributions packaging Open vSwitch

      摘录 Ubuntu 相关部分:
      Debian and Ubuntu has openvswitch-switch and openvswitch-common packages that includes the core userspace components of the switch

    3. apt 安装
      apt install openvswitch-switch

      apt install python3-pip

      pip3 install networking-ovn==4.0.4

      apt install ovn-central ovn-common ovn-host

      查询确认一下:
      dpkg -l |grep openvswitch

       	ii  openvswitch-common                    2.13.8-0ubuntu1                       amd64        Open vSwitch common components
       	ii  openvswitch-switch                    2.13.8-0ubuntu1                       amd64        Open vSwitch switch implementations
       	ii  python3-openvswitch                   2.13.8-0ubuntu1                       all          Python 3 bindings for Open vSwitch
      
      • 1
      • 2
      • 3

      pip3 list |grep ovn

       networking-ovn         4.0.4   
      
      • 1

      如果需要使用 ifconfig 和 route 命令,先安装 apt install net-tools
      如果很熟悉 ip 指令,可以不必安装

      直接继续可能会报错,直接 reboot 之后再来

      root@gate-109:/home/dhbm# ovn-nbctl ls-add inside

       ovn-nbctl: unix:/var/run/ovn/ovnnb_db.sock: database connection failed (No such file or directory)
      
      • 1

    建立 Provider networks

    1. 思路:

       1. 一个网桥(bridge)就是一个交换机
       2. 2 个虚拟机各建立一个 bridge,就相当于各自接入一个交换机
       3. 如果这 2 个交换机被分配到同一个网段,就可以直接互相访问彼此
       4. 将这个 bridge 上一个端口 (port )连接到物理网卡 (例如: eth1),他就可以通过这个物理网卡和外部网络互相访问 (即:连接到公网)
      
      • 1
      • 2
      • 3
      • 4

      在 OpenStack 里面,相当于给所有节点提供一个公网 (Provider networks)

    2. 在 203.0.113.101 上

       ovs-vsctl del-br br1
       ovs-vsctl add-br br1
       
       ovs-vsctl add-port br1 eth1
      
       使用 ifconfig 命令	
       ifconfig eth1  up
       ifconfig br1 203.0.113.101 up
       
       或者使用 ip 命令
       ip addr flush dev eth1
       ip addr add 203.0.113.101/24 dev br1
       ip link set br1 up
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
    3. 在 203.0.113.103 上

       ovs-vsctl del-br br1
       ovs-vsctl add-br br1
       
       ovs-vsctl add-port br1 eth1
       
       使用 ifconfig 命令
       ifconfig eth1  up
       ifconfig br1 203.0.113.103 up
       
       或者使用 ip 命令
       ip addr flush dev eth1
       ip addr add 203.0.113.101/24 dev br1
       ip link set br1 up
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
    4. 测试连通性

      在 203.0.113.101 上 ping 203.0.113.103
      OK

      在 203.0.113.103 上 ping 203.0.113.101
      OK

    同网段 Self-service networks

    1. 思路:

       1. 2 个虚拟机各建立一个bridge,就相当于各自接入一个交换机
       2. 如果这 2 个交换机被分配同一个网段,可以直接互相访问
       3. 在 OpenStack 里面,相当于给所有节点提供一个私有网络 (Self-service networks)
       4. 必须通过某些技术配置后才可以访问:这里是 VxLAN 隧道
      
      • 1
      • 2
      • 3
      • 4
    2. 在 203.0.113.101 上创建 br0

       ovs-vsctl del-br br0
       
       ovs-vsctl add-br br0
       
       使用 ifconfig 命令
       ifconfig br0 1.2.3.101/24 up
       
       或者使用 ip 命令
       ip addr add 1.2.3.101/24 dev br0
       ip link set br0 up
      
       ovs-vsctl add-port br0 vx1 -- set interface vx1 type=vxlan options:remote_ip=203.0.113.103
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    3. 检查一下 203.0.113.101 上的 br0

       root@ubuntu2004-101:/home/dhbm# ovs-vsctl show
       
       57af7789-d775-440a-a204-e663b3c75b3e
           Bridge br0
               Port br0
                   Interface br0
                       type: internal
               Port vx1
                   Interface vx1
                       type: vxlan
                       options: {remote_ip="203.0.113.103"}
           Bridge br1
               Port br1
                   Interface br1
                       type: internal
               Port eth1
                   Interface eth1
           Bridge br-int
               fail_mode: secure
               Port br-int
                   Interface br-int
                       type: internal
           ovs_version: "2.13.8"
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
    4. 在 203.0.113.101 上设置路由
      route add default gw 203.0.113.1

      或者使用 ip route 命令,但是 ip 命令不能 add 2 个 default
      所以,只要存在 203.0.113.0/24 dev br1 proto kernel scope link src 203.0.113.101 即可,无需再加 (前面使用 ip 命令 flush 和 add 后 ,路由会自动将以前的 eth1 改为 br1 ,这一点又比 ifconfig 要方便

      非得加上的话,需要加上 metric 100

      ip route add default via 203.0.113.1 dev br1 proto static metric 100

       root@ubuntu2004-101:/home/dhbm# ip route list
       default via 203.0.113.1 dev br1 
       default via 192.168.0.81 dev eth0 proto static 
       1.2.3.0/24 dev br0 proto kernel scope link src 1.2.3.101 
       5.6.7.0/24 via 1.2.3.101 dev br0 scope link 
       192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.101 
       203.0.113.0/24 dev br1 proto kernel scope link src 203.0.113.101 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    5. 在 203.0.113.103 上上创建 br0

       ovs-vsctl del-br br0
       
       ovs-vsctl add-br br0
       
       ifconfig br0 1.2.3.103/24 up
       
       ovs-vsctl add-port br0 vx1 -- set interface vx1 type=vxlan options:remote_ip=203.0.113.103
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    6. 检查一下 203.0.113.101 上的 br0

       root@ubuntu2004-103:/home/dhbm# ovs-vsctl show
       
       a762a8e4-e153-4895-b87a-c7f7bc3ce3c3
           Bridge br1
               Port br1
                   Interface br1
                       type: internal
               Port eth1
                   Interface eth1
           Bridge br0
               Port br0
                   Interface br0
                       type: internal
               Port vx1
                   Interface vx1
                       type: vxlan
                       options: {remote_ip="203.0.113.101"}
           Bridge br-int
               fail_mode: secure
               Port br-int
                   Interface br-int
                       type: internal
           ovs_version: "2.13.8"
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
    7. 在 203.0.113.101 上设置路由
      使用 route 命令
      route add default gw 203.0.113.1
      或者使用 ip route 命令
      ip route add default via 203.0.113.1 dev br1 proto static metric 100

       root@ubuntu2004-103:/home/dhbm# ip route list
       
       default via 203.0.113.1 dev br1 
       default via 192.168.0.81 dev eth0 proto static 
       1.2.3.0/24 via 5.6.7.103 dev br0 scope link 
       5.6.7.0/24 dev br0 proto kernel scope link src 5.6.7.103 
       192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.103 
       203.0.113.0/24 dev br1 proto kernel scope link src 203.0.113.103 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    8. 连通性测试

      在 203.0.113.101 上 (Self-service networks : 1.2.3.101)
      ping 1.2.3.103
      OK

      在 203.0.113.103 上 (Self-service networks : 1.2.3.103)
      ping 1.2.3.101
      OK

    不同网段 Self-service networks

    1. 思路:

       1. 2 个虚拟机各建立一个bridge,就相当于各自接入一个交换机
       2. 如果这 2 个交换机被分配到不同网段,就无法直接互相访问彼此
       3. 在 OpenStack 里面,相当于给所有节点提供一个私有网络 (Self-service networks)
       4. 必须通过某些技术配置后才可以访问:这里是 VxLAN 隧道
      
      • 1
      • 2
      • 3
      • 4
    2. 直接在 203.0.113.103 上重新分配br0 的 ip 地址,即: ifconfig br0 5.6.7.103/24 up

    3. 连通性测试

      在 203.0.113.101 上 (Self-service networks : 1.2.3.101)
      ping 5.6.7.103
      不通
      在 203.0.113.103 上 (Self-service networks : 5.6.7.103)
      ping 1.2.3.101
      不通

    4. 在 203.0.113.101 上 增加路由
      使用 route 命令
      route add -net 5.6.7.0 netmask 255.255.255.0 gw 1.2.3.1 dev br0

      或者使用 ip route 命令
      ip route add 5.6.7.0/24 via 1.2.3.101 dev br0

       root@ubuntu2004-101:/home/dhbm# ip route list
       
       default via 203.0.113.1 dev br1 
       default via 192.168.0.81 dev eth0 proto static 
       1.2.3.0/24 dev br0 proto kernel scope link src 1.2.3.101 
       5.6.7.0/24 via 1.2.3.101 dev br0 scope link 
       192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.101 
       203.0.113.0/24 dev br1 proto kernel scope link src 203.0.113.101 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    5. 在 203.0.113.103 上 增加路由
      使用 route 命令
      route add -net 1.2.3.0 netmask 255.255.255.0 gw 5.6.7.103 dev br0

      或者使用 ip route 命令
      ip route add 1.2.3.0/24 via 1.2.3.103 dev br0

       root@ubuntu2004-103:/home/dhbm# ip route list
       
       default via 203.0.113.1 dev br1 
       default via 192.168.0.81 dev eth0 proto static 
       1.2.3.0/24 via 5.6.7.103 dev br0 scope link 
       5.6.7.0/24 dev br0 proto kernel scope link src 5.6.7.103 
       192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.103 
       203.0.113.0/24 dev br1 proto kernel scope link src 203.0.113.103 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    6. 再次连通性测试

      在 203.0.113.101 上 (Self-service networks : 1.2.3.101)

       root@ubuntu2004-101:/home/dhbm# ping -c 4 5.6.7.103
       PING 5.6.7.103 (5.6.7.103) 56(84) bytes of data.
       64 bytes from 5.6.7.103: icmp_seq=1 ttl=64 time=1.84 ms
       64 bytes from 5.6.7.103: icmp_seq=2 ttl=64 time=0.415 ms
       64 bytes from 5.6.7.103: icmp_seq=3 ttl=64 time=0.426 ms
       64 bytes from 5.6.7.103: icmp_seq=4 ttl=64 time=0.411 ms
       
       --- 5.6.7.103 ping statistics ---
       4 packets transmitted, 4 received, 0% packet loss, time 3038ms
       rtt min/avg/max/mdev = 0.411/0.774/1.844/0.617 ms
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10

      在 203.0.113.103 上 (Self-service networks : 5.6.7.103)

       root@ubuntu2004-103:/home/dhbm# ping -c 4 1.2.3.101
       PING 1.2.3.101 (1.2.3.101) 56(84) bytes of data.
       64 bytes from 1.2.3.101: icmp_seq=1 ttl=64 time=1.94 ms
       64 bytes from 1.2.3.101: icmp_seq=2 ttl=64 time=0.357 ms
       64 bytes from 1.2.3.101: icmp_seq=3 ttl=64 time=0.386 ms
       64 bytes from 1.2.3.101: icmp_seq=4 ttl=64 time=0.383 ms
       
       --- 1.2.3.101 ping statistics ---
       4 packets transmitted, 4 received, 0% packet loss, time 3038ms
       rtt min/avg/max/mdev = 0.357/0.765/1.937/0.676 ms
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10

    推倒重来

    在 2 个虚拟机上,然后 reboot

    ovs-vsctl del-port br0 vx1 
    ovs-vsctl del-br br0
    ovs-vsctl del-br br1
    
    ip route del default via 203.0.113.1 dev br1
    	
    netplan apply
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    仅记录 203.0.113.101 上的变化

    推倒之前

    root@ubuntu2004-101:/home/dhbm# ip a
    
    1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0:  mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:15:5d:5a:a6:8e brd ff:ff:ff:ff:ff:ff
        inet 192.168.0.101/24 brd 192.168.0.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::215:5dff:fe5a:a68e/64 scope link 
           valid_lft forever preferred_lft forever
    3: eth1:  mtu 1500 qdisc mq master ovs-system state UP group default qlen 1000
        link/ether 00:15:5d:5a:a6:91 brd ff:ff:ff:ff:ff:ff
        inet6 fe80::215:5dff:fe5a:a691/64 scope link 
           valid_lft forever preferred_lft forever
    4: ovs-system:  mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether e6:bf:7c:2d:78:0f brd ff:ff:ff:ff:ff:ff
    5: br-int:  mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether fe:41:06:fc:d0:4a brd ff:ff:ff:ff:ff:ff
    15: br1:  mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
        link/ether 00:15:5d:5a:a6:91 brd ff:ff:ff:ff:ff:ff
        inet 203.0.113.101/24 brd 203.0.113.255 scope global br1
           valid_lft forever preferred_lft forever
        inet6 fe80::215:5dff:fe5a:a691/64 scope link 
           valid_lft forever preferred_lft forever
    16: br0:  mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
        link/ether ce:79:7f:7f:c6:43 brd ff:ff:ff:ff:ff:ff
        inet 1.2.3.101/24 brd 1.2.3.255 scope global br0
           valid_lft forever preferred_lft forever
        inet6 fe80::cc79:7fff:fe7f:c643/64 scope link 
           valid_lft forever preferred_lft forever
    18: vxlan_sys_4789:  mtu 65000 qdisc noqueue master ovs-system state UNKNOWN group default qlen 1000
        link/ether c2:1f:9e:3b:80:c8 brd ff:ff:ff:ff:ff:ff
        inet6 fe80::c01f:9eff:fe3b:80c8/64 scope link 
           valid_lft forever preferred_lft forever
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    推倒之后

    root@ubuntu2004-101:/home/dhbm# ip a
    
    1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0:  mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:15:5d:5a:a6:8e brd ff:ff:ff:ff:ff:ff
        inet 192.168.0.101/24 brd 192.168.0.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::215:5dff:fe5a:a68e/64 scope link 
           valid_lft forever preferred_lft forever
    3: eth1:  mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:15:5d:5a:a6:91 brd ff:ff:ff:ff:ff:ff
        inet 203.0.113.101/24 brd 203.0.113.255 scope global eth1
           valid_lft forever preferred_lft forever
        inet6 fe80::215:5dff:fe5a:a691/64 scope link 
           valid_lft forever preferred_lft forever
    4: ovs-system:  mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether e6:bf:7c:2d:78:0f brd ff:ff:ff:ff:ff:ff
    5: br-int:  mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether fe:41:06:fc:d0:4a brd ff:ff:ff:ff:ff:ff
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    Linux--线程 创建、等待、退出
    从0到1学SpringCloud——11 gateway网关路由配置详解
    Cesium 源码解析 Model(四)
    源码安装Openlava 4.0
    Python武器库开发-基础篇(四)
    【JAVASE系列】06_继承,多态与final
    战术资源规划中的常见挑战
    docker使用详解
    4.1.3 名称的特殊处理
    《Mycat分布式数据库架构》之原理
  • 原文地址:https://blog.csdn.net/u010953609/article/details/128040685