文章最后有踩坑过程,前面先写正常流程。
背景:最近想在自己笔记本上搭建openstack集群,再在集群上面上面跑K8S。
首先需要准备两个网络供虚拟机使用,一个网络用于连接互联网用来在线安装各种服务和组件,这个网络
使用KVM的NET模式实现。
另一个网络是在KVM中创建虚拟网络交换机(Bridge)该交换机用于将虚拟机(VM)连接到与主机相同的网络,用来管理Openstack集群。
Bridge:网桥是将两个或多个网段互连并在它们之间提供通信的数据链路层设备。它创建单个网络接口,以从多个网络或网段中建Bridge立单个聚合网络。它根据主机的MAC地址(存储在MAC地址表中)转发流量。
- 首先查看本机网络配置:
[root@openstack_node1 ~]# ifconfig
enp7s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.200.201 netmask 255.255.255.0 broadcast 192.168.200.255
inet6 fe80::f7b3:9cd5:1eb1:dc96 prefixlen 64 scopeid 0x20<link>
ether b4:a9:fc:21:50:16 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 3240 bytes 300602 (293.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3240 bytes 300602 (293.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlp0s20f3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.109 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::93ac:74c4:370f:e8c4 prefixlen 64 scopeid 0x20<link>
ether 50:eb:71:5d:a0:9d txqueuelen 1000 (Ethernet)
RX packets 103320 bytes 89748597 (85.5 MiB)
RX errors 0 dropped 6 overruns 0 frame 0
TX packets 62629 bytes 13903788 (13.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
可以看到有两张网卡:一张以太网卡enp7s0,一张无线网卡wlp0s20f3,这里我们使用这个以太网卡来接入网桥,实现主机与虚拟机通信。
- 查看网络连接状态,确保网卡处于连接状态
[root@openstack_node1 ~]# nmcli connection show --active
[root@openstack_node1 ~]# nmcli connection show --active
NAME UUID TYPE DEVICE
1706 32201b66-07ad-4b41-bd58-90a20573ab61 wifi wlp0s20f3
enp7s0 2d1211ed-22d9-4bfa-9a2e-223dc56ef4ee ethernet enp7s0
也可以使用nmcli device status 命令查看网卡状态。
[root@openstack_node1 ~]# nmcli device status
[root@openstack_node1 ~]# nmcli device status
DEVICE TYPE STATE CONNECTION
wlp0s20f3 wifi connected 1706
enp7s0 ethernet connected enp7s0
p2p-dev-wlp0s20f3 wifi-p2p disconnected --
lo loopback unmanaged --
- 创建网桥
创建名为
[root@openstack_node1 ~]# nmcli connection add type bridge con-name virbr0 ifname virbr0 autoconnect yes
[root@openstack_node1 ~]# nmcli connection add type bridge con-name virbr0 ifname virbr0 autoconnect yes
Connection 'virbr0' (d02717a2-acd1-41c7-a35a-a2b296e7f62e) successfully added.
提示成功,使用nmcli device status、nmcli connection show --active进行查看
[root@openstack_node1 ~]# nmcli device status
[root@openstack_node1 ~]# nmcli device status
DEVICE TYPE STATE CONNECTION
wlp0s20f3 wifi connected 1706
enp7s0 ethernet connected enp7s0
virbr0 bridge connecting (getting IP configuration) virbr0
p2p-dev-wlp0s20f3 wifi-p2p disconnected --
lo loopback unmanaged --
[root@openstack_node1 ~]# nmcli connection show --active
[root@openstack_node1 ~]# nmcli connection show --active
NAME UUID TYPE DEVICE
virbr0 d02717a2-acd1-41c7-a35a-a2b296e7f62e bridge virbr0
1706 32201b66-07ad-4b41-bd58-90a20573ab61 wifi wlp0s20f3
enp7s0 2d1211ed-22d9-4bfa-9a2e-223dc56ef4ee ethernet enp7s0
- 将以太网接口enp7s0加入网桥virbr0
[root@openstack_node1 ~]# nmcli connection add type bridge-slave ifname enp7s0 master virbr0
[root@openstack_node1 ~]# nmcli connection add type bridge-slave ifname enp7s0 master virbr0
Connection 'bridge-slave-enp7s0' (00a58df5-b08c-4a17-958b-d29929ccdca9) successfully added.
提示成功,此时在下面 /etc/sysconfig/network-scripts/目录下会生成一个名为:ifcfg-bridge-slave-enp7s0的配置文件,上一步添加网桥virbr0成功后也会生成一个名为 ifcfg-virbr0 的配置文件。
[root@openstack_node1 network-scripts]# ll
total 20
-rw-r--r--. 1 root root 428 Aug 8 11:35 ifcfg-1706
-rw-r--r-- 1 root root 120 Aug 8 13:26 ifcfg-bridge-slave-enp7s0
-rw-r--r-- 1 root root 348 Aug 8 11:29 ifcfg-enp7s0
-rw-r--r-- 1 root root 317 Aug 8 13:16 ifcfg-virbr0
-rw-------. 1 root root 17 Aug 1 20:21 keys-1706
-rw-r--r-- 1 root root 0 Aug 4 20:02 route-1706
以下是两个配置文件的内容。
[root@openstack_node1 network-scripts]# vim ifcfg-virbr0
STP=yes
BRIDGING_OPTS=priority=32768
TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=virbr0
UUID=d02717a2-acd1-41c7-a35a-a2b296e7f62e
DEVICE=virbr0
ONBOOT=yes
[root@openstack_node1 network-scripts]# vim ifcfg-bridge-slave-enp7s0
TYPE=Ethernet
NAME=bridge-slave-enp7s0
UUID=00a58df5-b08c-4a17-958b-d29929ccdca9
DEVICE=enp7s0
ONBOOT=yes
BRIDGE=virbr0
- 关闭以太网卡,激活网桥
查询网桥状态,这里看起来一切正常,但仔细看 nmcli device status输出的结果,以太网enp7s0 的
“CONNECTION"还是自己,正常情况下应该是我们刚刚生成的这个 bridge-slave-enp7s0 接口,且这个接口也没有出现在” nmcli connection show --active "的列表里。
[root@openstack_node1 network-scripts]# nmcli connection show --active
NAME UUID TYPE DEVICE
virbr0 d02717a2-acd1-41c7-a35a-a2b296e7f62e bridge virbr0
1706 32201b66-07ad-4b41-bd58-90a20573ab61 wifi wlp0s20f3
enp7s0 2d1211ed-22d9-4bfa-9a2e-223dc56ef4ee ethernet enp7s0
[root@openstack_node1 network-scripts]# nmcli device status
DEVICE TYPE STATE CONNECTION
wlp0s20f3 wifi connected 1706
enp7s0 ethernet connected enp7s0
virbr0 bridge connecting (getting IP configuration) virbr0
p2p-dev-wlp0s20f3 wifi-p2p disconnected --
lo loopback unmanaged --
我们使用"brctl show"进行验证,可以看到"interfaces"那一列是空的。
[root@openstack_node1 network-scripts]# brctl show
[root@openstack_node1 network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.000000000000 yes
停用以太网enp7s0,亲测使用"nmcli connection down enp7s0"或者“ifdown enp7s0”都可以,我倾向使用"ifdown enp7s0",如下所示网桥virbr0接口显示正常。
[root@openstack_node1 network-scripts]# ifdown enp7s0
[root@openstack_node1 network-scripts]# ifdown enp7s0
Connection 'enp7s0' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1)
[root@openstack_node1 network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.b4a9fc215016 yes enp7s0
[root@openstack_node1 network-scripts]# nmcli connection show --active
NAME UUID TYPE DEVICE
virbr0 d02717a2-acd1-41c7-a35a-a2b296e7f62e bridge virbr0
1706 32201b66-07ad-4b41-bd58-90a20573ab61 wifi wlp0s20f3
bridge-slave-enp7s0 00a58df5-b08c-4a17-958b-d29929ccdca9 ethernet enp7s0
[root@openstack_node1 network-scripts]# nmcli device status
DEVICE TYPE STATE CONNECTION
wlp0s20f3 wifi connected 1706
enp7s0 ethernet connected bridge-slave-enp7s0
virbr0 bridge connecting (getting IP configuration) virbr0
p2p-dev-wlp0s20f3 wifi-p2p disconnected --
lo loopback unmanaged --
自此网桥就搭建完毕了。
- 遇到的问题
1.以太网卡状态为unavailable,nmcli connection up enp7s0提示centos8 Error: Failed to add/activate new connection: Connection ‘enp7s0’ is not acttive
然后使用ifup 或者ifdown进行恢复,又报错eth0: error fetching interface information: Device not found
这里网卡的状态可以使用上文的: nmcli device status 命令进行查询。
device有4种状态
(1)connected:已被NM管理,并且当前有活跃的connection
(2)disconnected:已被NM管理,但是当前没有活跃的connection
(3)unmanaged:未被NM管理
(4)unavailable:不可用,NM无法管理,通常出现于网卡link为down时(如:ip link set ethX down)
我的解决的办法:删掉所有的网桥相关配置,关闭无线网,我只记得好像使用了下面四个命令:
nmcli connection up enp7s0 :可能会报错
ifup enps70:可能会报错
ip link set enps70
nmcli device reapply enp7s0
使用network设置中的图形化界面添加一个连接,这个MAC Address一定要填以太网卡的MAC地址,其他的就正常填写,填写完了以后,重启Networkmanager,然后运行以上四个命令,最后再查看这个以太网卡的状态,一般都会OK的,好像还可以用nmtui这个工具添加连接,这个也可以试试,目地就是要NM管理这个以太网卡。2.添加网桥后无法连接互联网(我是使用无线网连接互联网)
添加网桥后没法连接百度,网络图标显示以太网连接,查看配置无线网连接正常。
我的解决的办法:修改网桥以及以太网卡配置文件中"DEFROUTE"参数配置为:“DEFROUTE=no"
然后shutdown所有连接,重启Networkmanager服务,打开无线网连接,检查网络连接状况,此时无线网一般都能正常连接至互联网,然后再逐一开启以太网卡以及网桥。这个相当于是降低以太网连接的优先级,系统默认应该是以太网优先级较高,当以太网连接被激活时,路由优先走以太卡网出去,导致电脑无法上网。