Open vSwitch是一种生产质量的多层虚拟交换机,根据开源Apache 2.0许可证进行许可。它旨在通过编程扩展实现大规模网络自动化,同时仍然支持标准管理接口和协议(例如NetFlow、sFlow、IPFIX、RSPAN、CLI、LACP、802.1ag)。此外,它旨在支持跨多个物理服务器的分发,类似于VMware的vNetwork分布式vswitch或Cisco的Nexus 1000V。
本实验基于ubuntu2204
查看 OVS 版本
apt install openvswitch-switch -y
root@controller:~# ovs-vsctl --version
ovs-vsctl (Open vSwitch) 3.3.0
DB Schema 8.5.0
查看当前配置的所有交换机
root@controller:~# ovs-vsctl list-br
br-ens34
br-int
br-tun
查看交换机的详细信息
root@controller:~# ovs-vsctl show
62fca535-c4c6-4e0d-a04e-183b81ed7f0c
Manager "ptcp:6640:127.0.0.1"
is_connected: true
Bridge br-ens34
Controller "tcp:127.0.0.1:6633"
is_connected: true
fail_mode: secure
datapath_type: system
Port ens34
Interface ens34
Port br-ens34
Interface br-ens34
type: internal
Port phy-br-ens34
Interface phy-br-ens34
type: patch
options: {peer=int-br-ens34}
Bridge br-int
Controller "tcp:127.0.0.1:6633"
is_connected: true
fail_mode: secure
datapath_type: system
Port br-int
Interface br-int
type: internal
Port tap4d5ba8f5-14
tag: 2
Interface tap4d5ba8f5-14
type: internal
Port patch-tun
Interface patch-tun
type: patch
options: {peer=patch-int}
Port tap41358d3e-b7
tag: 1
Interface tap41358d3e-b7
type: internal
Port int-br-ens34
Interface int-br-ens34
type: patch
options: {peer=phy-br-ens34}
Port qr-b2dc1309-5d
tag: 2
Interface qr-b2dc1309-5d
type: internal
Port qg-8b213340-82
tag: 1
Interface qg-8b213340-82
type: internal
Bridge br-tun
Controller "tcp:127.0.0.1:6633"
is_connected: true
fail_mode: secure
datapath_type: system
Port br-tun
Interface br-tun
type: internal
Port patch-int
Interface patch-int
type: patch
options: {peer=patch-tun}
ovs_version: "3.3.0"
创建和删除桥接
创建br-test网桥
root@controller:~# ovs-vsctl add-br br-test
root@controller:~# ovs-vsctl list-br
br-ens34
br-int
br-test
br-tun
删除
root@controller:~# ovs-vsctl del-br br-test
root@controller:~# ovs-vsctl list-br
br-ens34
br-int
br-tun
添加和删除端口
添加的端口注意对应网口名
root@controller:~# ovs-vsctl show
1b89d8a6-16c1-4e07-b725-3b56d0134fba
ovs_version: "3.3.0"
root@controller:~# ovs-vsctl add-br br-test
root@controller:~# ovs-vsctl add-port br-test ens34
root@controller:~# ovs-vsctl show
1b89d8a6-16c1-4e07-b725-3b56d0134fba
Bridge br-test
Port br-test
Interface br-test
type: internal
Port ens34
Interface ens34
ovs_version: "3.3.0"
root@controller:~# 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 noprefixroute
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:5f:fb:01 brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 192.168.200.190/24 brd 192.168.200.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe5f:fb01/64 scope link
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ovs-system state UP group default qlen 1000
link/ether 00:0c:29:5f:fb:0b brd ff:ff:ff:ff:ff:ff
altname enp2s2
inet6 fe80::20c:29ff:fe5f:fb0b/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 9a:f0:de:cd:9d:4a brd ff:ff:ff:ff:ff:ff
5: br-test: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:0c:29:5f:fb:0b brd ff:ff:ff:ff:ff:ff
删除端口
root@controller:~# ovs-vsctl del-port br-test ens34
root@controller:~# ovs-vsctl show
1b89d8a6-16c1-4e07-b725-3b56d0134fba
Bridge br-test
Port br-test
Interface br-test
type: internal
ovs_version: "3.3.0"
配置端口
Open vSwitch (OVS) 支持多种端口类型,每种类型都有其特定的用途和功能。以下是常见的端口类型及其区别:
Internal (内部端口)
描述:内部端口是 OVS 创建的虚拟网络接口,可以用于与主机通信。
用途:用于桥接 OVS 和主机网络堆栈,允许主机与 OVS 网络中的其他设备通信。
示例:
root@controller:~# ovs-vsctl show
1b89d8a6-16c1-4e07-b725-3b56d0134fba
Bridge br-test
Port br-test
Interface br-test
type: internal
ovs_version: "3.3.0"
root@controller:~# ovs-vsctl add-port br-test port-test -- set interface port-test type=internal
root@controller:~# ovs-vsctl show
1b89d8a6-16c1-4e07-b725-3b56d0134fba
Bridge br-test
Port port-test
Interface port-test
type: internal
Port br-test
Interface br-test
type: internal
ovs_version: "3.3.0"
root@controller:~#
- Tap (虚拟网络接口)
描述:Tap 端口用于连接虚拟机或容器到 OVS。
用途:用于虚拟化环境中连接虚拟机的网络接口到 OVS。
示例:
root@controller:~# ovs-vsctl show
1b89d8a6-16c1-4e07-b725-3b56d0134fba
Bridge br-test
Port br-test
Interface br-test
type: internal
ovs_version: "3.3.0"
root@controller:~# ip tuntap add mode tap tap1
root@controller:~# ovs-vsctl add-port br-test tap1
root@controller:~# ovs-vsctl show
1b89d8a6-16c1-4e07-b725-3b56d0134fba
Bridge br-test
Port br-test
Interface br-test
type: internal
Port tap1
Interface tap1
ovs_version: "3.3.0"
- Patch (补丁端口)
描述:补丁端口用于将两个不同的 OVS 桥接连接起来。
用途:在复杂的网络拓扑中连接多个桥接。
示例:
root@controller:~# ovs-vsctl add-br br-test2
root@controller:~#
root@controller:~# ovs-vsctl show
1b89d8a6-16c1-4e07-b725-3b56d0134fba
Bridge br-test
Port br-test
Interface br-test
type: internal
Port tap1
Interface tap1
Bridge br-test2
Port br-test2
Interface br-test2
type: internal
ovs_version: "3.3.0"
root@controller:~# ovs-vsctl add-port br-test patch-br0 -- set interface patch-br0 type=patch options:peer=patch-br1
root@controller:~# ovs-vsctl add-port br-test patch-br1 -- set interface patch-br1 type=patch options:peer=patch-br0
root@controller:~# ovs-vsctl show
1b89d8a6-16c1-4e07-b725-3b56d0134fba
Bridge br-test
Port br-test
Interface br-test
type: internal
Port tap1
Interface tap1
Port patch-br1
Interface patch-br1
type: patch
options: {peer=patch-br0}
Port patch-br0
Interface patch-br0
type: patch
options: {peer=patch-br1}
Bridge br-test2
Port br-test2
Interface br-test2
type: internal
ovs_version: "3.3.0"
- GRE (GRE 隧道)
描述:GRE 隧道端口用于创建基于 GRE 的隧道。
用途:在不同地理位置的网络之间创建隧道,实现远程数据中心的连接。
示例:
root@controller:~# ovs-vsctl show
1b89d8a6-16c1-4e07-b725-3b56d0134fba
Bridge br-test
Port br-test
Interface br-test
type: internal
ovs_version: "3.3.0"
root@controller:~# ovs-vsctl add-port br-test gre-test -- set interface gre-test type=gre options:remote_ip=0.0.0.0
root@controller:~# ovs-vsctl show
1b89d8a6-16c1-4e07-b725-3b56d0134fba
Bridge br-test
Port br-test
Interface br-test
type: internal
Port gre-test
Interface gre-test
type: gre
options: {remote_ip="0.0.0.0"}
ovs_version: "3.3.0"
root@controller:~#
- VXLAN (VXLAN 隧道)
描述:VXLAN 隧道端口用于创建基于 VXLAN 的隧道。
用途:用于在虚拟化环境中创建 Overlay 网络,提供大规模虚拟网络隔离。
示例:
ovs-vsctl add-port br-test vxlan-test -- set interface vxlan-test type=vxlan options:remote_ip=0.0.0.0
- Geneve (Geneve 隧道)
描述:Geneve 隧道端口是新一代的隧道协议,旨在提供更灵活的隧道封装。
用途:用于高级网络虚拟化和 Overlay 网络。
示例:
ovs-vsctl add-port br-test geneve-test -- set interface geneve-test type=geneve options:remote_ip=0.0.0.0
- STT (STT 隧道)
描述:STT 隧道端口用于创建基于 STT 的隧道。
用途:用于高性能网络虚拟化,尤其是在高吞吐量场景中。
示例:
ovs-vsctl add-port br-test stt-test -- set interface stt-test type=stt options:remote_ip=0.0.0.0
- Bond (链路聚合)
描述:Bond 端口用于将多个物理接口绑定为一个逻辑接口,实现链路聚合。
用途:提供更高的带宽和冗余。
示例:
ovs-vsctl add-bond br0 bond0 eth1 eth2
- LISP (LISP 隧道)
描述:LISP 隧道端口用于基于 LISP 协议的隧道。
用途:用于位置无关的 IP 地址映射,实现动态的虚拟网络。
示例:
ovs-vsctl add-port br-test lisp-test -- set interface lisp-test type=lisp options:remote_ip=0.0.0.0
- Veth (虚拟以太网对)
描述:Veth 端口用于创建成对的虚拟以太网接口。
用途:用于连接不同的网络命名空间或者容器。
示例:
ip link add veth0 type veth peer name veth1
ovs-vsctl add-port br-test veth0
不同类型的端口在 OVS 中有不同的用途,选择合适的端口类型可以帮助您实现网络的各种需求。从内部通信、虚拟机连接、跨数据中心隧道到链路聚合,每种端口类型都有其特定的应用场景。
设置端口的 VLAN 标签
root@controller:~# ovs-vsctl show
1b89d8a6-16c1-4e07-b725-3b56d0134fba
Bridge br-test
Port br-test
Interface br-test
type: internal
Port ens34
Interface ens34
ovs_version: "3.3.0"
root@controller:~# ovs-vsctl set port ens34 tag=99
root@controller:~# ovs-vsctl show
1b89d8a6-16c1-4e07-b725-3b56d0134fba
Bridge br-test
Port br-test
Interface br-test
type: internal
Port ens34
tag: 99
Interface ens34
ovs_version: "3.3.0"
root@controller:~#