配置 Network Manager 以忽略某些网络设备
本文永久链接: https://www.xtplayer.cn/linux/network/networkmanager-not-manager-container-network-interface/
Network Manager 是一个能够动态控制和配置网络的守护进程,对应 NetworkManager.service 服务,默认配置文件路径 /etc/NetworkManager/NetworkManager.conf。从 RHEL/CentOS 7 开始,网络功能默认由 NetworkManager 以服务的形式提供。Ubuntu 的 server 版本默认没有启用 NetworkManager。
默认情况下,NetworkManager 管理除 lo
(环回)设备以外的所有设备。但是,在容器环境下很多网络设备是由网络驱动创建,NetworkManager 对容器网络设备的控制可能导致集群网络通信异常。因为需要将容器相关的设备设置为 unmanaged
,以使 NetworkManager 忽略这些设备。
查看设备状态
# 查看设备管理状态 |
临时 unmanaged
如果只是临时测试,那么可以通过 nmcli 命令去设置某个网络设备为 unmanaged 状态。但是只要重启 NetworkManager 服务或者重启了主机,网络接口又会恢复为 managed 状态。
nmcli device set xxx managed no |
永久 unmanaged
要想永久的排除 NetworkManager 管理某些网络设备,则需要通过配置文件去设置。
启用插件
在
/etc/NetworkManager/NetworkManager.conf
配置文件的[main] 层级下启用插件 keyfile。[main]
plugins=keyfile创建
/etc/NetworkManager/conf.d/99-unmanaged-devices.conf
配置文件,包含以下内容:[keyfile]
unmanaged-devices=interface-name:eth*,except:interface-name:eth0;interface-name:docker0;interface-name:flannel*;interface-name:flannel*;interface-name:cni0;;mac:66:77:88:99:00:aa- 以分号隔开;
- 可以使用通配符来匹配接口;
- interface-name:eth*,except:interface-name:eth0; 表示:除了 eth0,其他以 eth 开头的接口全部 unmanaged;
- 可以通过 mac 地址来排除接口;
重新加载配置
systemctl reload NetworkManager
禁用 Network Manager
配置的错误,或者配置更新不及时都可能导致不必要的问题,如果不是必须使用 NetworkManager 服务,一般情况还是建议禁用 Network Manager 服务。
在 centos 8.x 环境中,默认没有安装 network-scripts
,禁止 Network Manager 服务后则无法重启网络,可以通过手动执行 yum -y install network-scripts
来安装。