OpenStack单网卡部署
有些人就是喜欢折腾
最近又心血来潮,打算把两年前的坑填上,整了两天,算是把部署OpenStack的坑踩得差不多了。部署方法和之前一样,还是采用的kolla-ansible,主要是neutron_external_interface
的文档还是写的比较模糊,加上OpenVirtualSwitch一起,折腾了不少时间。
总结起来,这次折腾的主要结论是,能用,但没必要。由于OpenStack本来就是工业级的设计,开发者原本就是基于企业环境控制网络和外网分离的假设做的实现,因而把两个网络合并势必会受到操作系统等外部组件的设计阻碍,这次的坑基本上都是来自这方面。
首先一开始是打算虚拟一个接口给外网,然后用系统做流量转发给物理网口,但是因为技艺不精,一直失败,只好作罢。后来看到OpenStack的开发文档中提到,由于开发者电脑不一定像工业级服务器一样有两个网口,因而还是允许使用单网口机器部署的。只不过由于ovs要独占外网网口,对外网的访问要从原本的物理网口转移到虚拟网口,导致网络配置丢失,因而必须要使用非远程的方法进行配置(BMC除外)。
大致配置流程如下(假设网卡为eth0):
- 按照正常流程配置OpenStack安装,并将
network_interface
和neutron_external_interface
都设置为eth0
;
安装到一半的时候,由于kolla-ansible配置了ovs,导致原有网络配置失效,无法访问外网,表现为某些docker pull
失败,说无法连接到quay.io。 - 此时可以发现
eth0
被连接到了ovs-system
,但是用ovs-vsctl
查看,发现eth0
又被分配给了br-ex
。用nmcli
手动进行网络地址的配置:nmcli connection modify br-ex connection.autoconnect yes nmcli connection modify br-ex ipv4.addresses xxx.xxx.xxx.xxx nmcli connection modify br-ex ipv4.gateway xxx.xxx.xxx.xxx nmcli connection modify br-ex ipv4.method manual nmcli connection modify br-ex ipv4.dns xxx.xxx.xxx.xxx
其中
xxx.xxx.xxx.xxx
设置为网卡正常访问外网时的配置即可。需要注意这几条命令的顺序最好不要修改,因为nmcli
会做参数检查,如果没设置好某些参数是设置不了另一些的。 - 执行
nmcli device set br-ex managed yes
,将br-ex
的网络配置交给nmcli
执行,此时可以用ping
检查网络是否配置完成; - 修改
kolla-ansible
的globals.yml
,将network_interface
配置为br-ex
,因为此时eth0
已经无法正常用于访问网络; - 重新执行
kolla-ansible
的deploy
指令,等待部署完成即可。
由于nmtui
似乎没法快捷方便地管理ovs的网卡配置,因而每次重启后需要手动将br-ex
设置为managed
模式,才能由NetworkManager进行配置,即手动执行第三步。
接下来如果有新坑的话,就是在Linux上配个子网,然后让OpenStack用本地虚拟子网作为外网了