當使用OVN來做爲neutron的後端,來實現SDN方案時,我們也會需要虛擬機連接外網,本文記錄操作方法:
環境:pike版本,創建好net1,子網subnet1以及使用該網絡的虛擬機vm1
動手操作-任意計算節點
OVN是一種分佈式的網絡,也沒有網絡節點,我們挑選任意一個計算節點來提供外部網絡。
創建外部連接的網橋,做OVN映射
#ovs-vsctl add-br br-ex
#ovs-vsctl set Open_vSwitch . external-ids:ovn-bridge-mappings=provider1:br-ex
這裏創建了一個外部網橋br-ex,並將其映射到OVN的數據庫中,映射名稱爲provier1
將宿主機上的外部網卡添加到網橋上
#ovs-vsctl add-port br-ex ens192
#ip link set br-ex up
爲了使原來的網絡依然可用,我會把ens192這個外網網卡的網絡地址放到br-ex上,這樣會讓以前依賴該網絡的服務依然可用
#ip addr add 10.10.38.133/24 dev br-ex
#systemctl restart network
調整路由策略
由於網卡的調整,路由信息需要調整一下
#ip route
default via 10.152.35.254 dev ens192
10.10.38.0/24 dev br-ex proto kernel scope link src 10.10.38.112
10.10.31.0/24 dev ens224 proto kernel scope link src 10.10.31.112
169.254.0.0/16 dev ens192 scope link metric 1002
169.254.0.0/16 dev ens224 scope link metric 1003
刪除ens192相關的路由,將網卡替換爲br-ex
#ip route del default via 10.152.35.254
#ip route add default via 10.152.35.254 dev br-ex
這裏只是替換了默認路由,如果你有之前網卡的其他路由也別忘了替換
至此,計算節點就完成了。
動手操作-控制節點
修改配置文件,設置外網提供者provider
修改provider的值,這裏名稱我們設置爲provider1。至於什麼是provider以及openstack的provider模式和self-service模式的區別,可以參考我的這篇文章
#vim /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2_type_flat]
flat_networks = provider1
重啓neutron-server
#systemctl restart neutron-server
創建路由器
#neutron router-create router1
將虛擬機所在網絡子網掛在路由器上
#neutron router-interface-add router1 subnet1
創建連接外部的network
#openstack network create ext-net --external --provider-network-type flat --provider-physical-network provider1
這裏創建的網絡名稱爲ext-net ,映射的物理網絡名稱是provider1
創建與外部網絡一致的子網
#neutron subnet-create ext-net 10.152.35.0/24 --gateway 10.152.35.254 --allocation-pool start=10.152.35.200,end=10.152.35.208 --dns-nameserver 114.114.114.114
這裏指定了網關地址以及ip分配範圍和dns,也可以不寫,會自動分配,不過寫上更爲準確
虛擬機連接外網
#neutron router-gateway-set router1 ext-net
將ext-net的網絡加到對應路由器就可以,這時候你就會發現虛擬機已經可以通外網了