Ubuntu 20.04 上学习Open vSwitch :VxLAN

本文详细介绍了如何在Ubuntu环境中配置OpenvSwitch,包括安装、建立桥接、配置VxLAN隧道以及设置路由,以实现同网段和跨网段的虚拟网络连接。通过实例展示了OpenvSwitch在创建Provider networks和Self-service networks中的应用。
摘要由CSDN通过智能技术生成

参考
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
    

    pip3 list |grep ovn

     networking-ovn         4.0.4   
    

    如果需要使用 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)
    

建立 Provider networks

  1. 思路:

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

    在 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
    
  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
    
  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 隧道
    
  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
    
  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"
    
  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 
    
  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
    
  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"
    
  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 
    
  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 隧道
    
  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 
    
  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 
    
  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
    

    在 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
    

推倒重来

在 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

仅记录 203.0.113.101 上的变化

推倒之前

root@ubuntu2004-101:/home/dhbm# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST> 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: <BROADCAST,MULTICAST> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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

推倒之后

root@ubuntu2004-101:/home/dhbm# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST> 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: <BROADCAST,MULTICAST> 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
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈哈虎123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值