OVN网关路由器与外部通信

添加ovs网桥,桥接物理网卡

# 添加网桥
ovs-vsctl add-br br-eth0 
# 激活网桥
ip link set br-eth0 up 
 
# 网桥设置IP,这里设置成跟物理网卡IP一致,以保证依赖该IP的服务正常
ip addr add 172.16.10.3/24 dev br-eth0
 
# 网桥连接物理网卡
ovs-vsctl add-port br-eth0  eth0

# 172.16.10.2是网关
ip route replace default via 172.16.10.2 dev br-eth0
 
# 清除物理网卡的IP
ip addr del 172.16.10.3 dev eth0


# 注意,在桥接了的节点,添加ovn网桥映射,manager是下面创建的localnet交换机配置的网络名
ovs-vsctl set Open_vSwitch . external-ids:ovn-bridge-mappings=manager:br-eth0

搭建基础环境,连接物理网络

# 创建逻辑交换机lswitch-localnet(以localnet的方式连接物理网络)
ovn-nbctl ls-add lswitch-localnet

# 添加逻辑交换机端口lsp-localnet,其中network_name值为OVS网桥br-manager在OVN中的映射名称
ovn-nbctl lsp-add lswitch-localnet lsp-localnet
ovn-nbctl lsp-set-type lsp-localnet localnet
ovn-nbctl lsp-set-addresses lsp-localnet unknown
ovn-nbctl lsp-set-options lsp-localnet network_name=manager

# 创建逻辑交换机lswitch0(内部网络)
ovn-nbctl ls-add lswitch0

# 创建并配置逻辑交换机端口lswitch0-port1
ovn-nbctl lsp-add lswitch0 lswitch0-port1
ovn-nbctl lsp-set-addresses lswitch0-port1 "00:00:00:00:00:01 10.0.0.11"
ovn-nbctl lsp-set-port-security lswitch0-port1 "00:00:00:00:00:01 10.0.0.11"

然后创建逻辑路由器,连通交换机lswitch-localnet和lswitch0

# 创建逻辑路由器lrouter(由于NAT需要用到三层网关路由,这里需要指定options:chassis参数,值取自host01节点配置)
ovn-nbctl create Logical_Router name=lrouter options:chassis=0633a3e1-ff16-4922-8738-f007e43d6fa7

# 创建逻辑路由器端口lrouter-port0
ovn-nbctl lrp-add lrouter lrouter-port0 00:00:00:00:ee:01 10.0.0.1/24
# 创建逻辑交换机端口lswitch0-lrouter-port0,并将其与逻辑路由器端口lrouter-port0关联起来
ovn-nbctl lsp-add lswitch0 lswitch0-lrouter-port0 -- set Logical_Switch_Port lswitch0-lrouter-port0 type=router options:router-port=lrouter-port0 addresses='"00:00:00:00:ee:01"'
# 创建逻辑路由器端口lrouter-port1
ovn-nbctl lrp-add lrouter lrouter-port1 00:00:00:00:ee:02 172.16.10.98/24
# 创建逻辑交换机端口 localnet-lrouter-port1,并将其与逻辑路由器端口lrouter-port1关联起来
ovn-nbctl lsp-add lswitch-localnet localnet-lrouter-port1 -- set Logical_Switch_Port localnet-lrouter-port1 type=router options:router-port=lrouter-port1 addresses='"00:00:00:00:ee:02"'
# 添加路由网关
ovn-nbctl lr-route-add lrouter "0.0.0.0/0"   172.16.10.2

创建snat和dnat_and_snat

# 创建snat规则
ovn-nbctl lr-nat-add lrouter snat 172.16.10.98 10.0.0.0/24
# 创建dnat_and_snat规则
ovn-nbctl lr-nat-add lrouter dnat_and_snat 172.16.10.97 10.0.0.11 lswitch0-port1 00:00:00:00:00:01
ovn-nbctl lr-nat-list lrouter
TYPE             EXTERNAL_IP        LOGICAL_IP            EXTERNAL_MAC         LOGICAL_PORT
dnat_and_snat    172.16.10.97       10.0.0.11             00:00:00:00:00:01    lswitch0-port1
snat             172.16.10.98       10.0.0.0/24

最后进行测试

# 创建ovs端口,并和之前创建好的ovn逻辑交换机端口建立关联
ovs-vsctl --may-exist add-port br-int lsport1 -- set Interface lsport1 type=internal -- set Interface lsport1 external_ids:iface-id=lswitch0-port1

# 创建命名空间vm1,并设置ovs端口lsport1的IP和MAC信息
ip netns add vm1
ip link set lsport1 netns vm1
ip netns exec vm1 ip link set lsport1 address 00:00:00:00:00:01
ip netns exec vm1 ip addr add 10.0.0.11/24 dev lsport1
ip netns exec vm1 ip link set lsport1 up
ip netns exec vm1 ip addr show
ip netns exec vm1 ip route add default via 10.0.0.1

# 测试snat功能
ip netns exec vm1 ping 172.16.10.2 (可以ping通)
ip netns exec vm1 ping 110.242.68.6(百度IP,可以ping通)
ip netns exec vm1 ping 114.114.114.114(DNS,可以ping通)

# 测试dnat_and_snat功能
ping 172.16.10.97(central ping vm1,可以ping通)

分布式网关端口配置

# 添加多个网关端口,优先级默认为0,也可以手动设置
ovn-nbctl lrp-set-gateway-chassis lrouter-port1 node18
ovn-nbctl lrp-set-gateway-chassis lrouter-port1 node19
ovn-nbctl lrp-set-gateway-chassis lrouter-port1 node20 1
ovn-nbctl lrp-set-gateway-chassis lrouter-port1 node21 2
# 查看
ovn-nbctl show lrouter
router e8e62284-e8b8-49bf-bc34-907700cb2282 (lrouter)
    port lrouter-port1
        mac: "00:00:00:00:ee:02"
        networks: ["172.16.10.98/24"]
        gateway chassis: [node18 node19 node20 node21]


# 设置分布式网关端口的另外一种方式:
ovn-nbctl ha-chassis-group-add ha1
ovn-nbctl ha-chassis-group-add-chassis ha1 master 1
ovn-nbctl ha-chassis-group-add-chassis ha1 node1 2
# 465efd10-c0e0-4966-be32-a20b213a2dbc 为 ha1 的uuid,可通过 ovn-nbctl ha-chassis-group-list 查看
ovn-nbctl set Logical_Router_Port lrouter-port1 ha_chassis_group=465efd10-c0e0-4966-be32-a20b213a2dbc

以上部分内容参考:https://zhuanlan.zhihu.com/p/689602069 ,仅记录备忘,如有侵权,请联系我删除。

Open Virtual Network(OVN)是建立在Open vSwitch(OVS)之上的虚拟网络解决方案。OVN通过OVS提供的网络转发和流量处理功能来实现网络通信。 OVNOVS之间的通信是通过Northbound、Southbound和Southbound数据库实现的。 1. Northbound:Northbound是OVN和外部管理平面之间的接口。外部管理平面可以是OpenStack、Kubernetes等云管理平台或其他管理工具。通过Northbound接口,管理平面可以向OVN提供逻辑网络配置(如逻辑交换机、逻辑端口等),并获取网络状态和统计数据。 2. Southbound:Southbound是OVN和底层网络设备之间的接口。底层网络设备可以是物理交换机、虚拟交换机等。通过Southbound接口,OVN可以向底层网络设备下发流表规则,以实现逻辑网络的转发和流量处理。 3. Southbound数据库:Southbound数据库是一个存储底层网络设备状态和配置信息的数据库。OVN使用Southbound数据库来同步逻辑网络配置和底层网络设备状态。Southbound数据库可以是OVSDB(Open vSwitch Database)或其他兼容的数据库。 具体通信流程如下: 1. 外部管理平面通过Northbound接口将逻辑网络配置写入OVN控制器。 2. OVN控制器将逻辑网络配置存储在自己的数据库中。 3. OVN控制器将逻辑网络配置转换为OVS的规则,并将其下发到相应的OVS交换机上。 4. OVS交换机根据收到的规则进行数据包的转发和流量处理。 5. OVS交换机将处理后的数据包发送到目标主机或底层网络设备。 以上是OVNOVS之间通信的基本流程。通过这种方式,OVN实现了对逻辑网络的管理和控制,而OVS提供了实际的网络转发和流量处理功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值