本文永久链接: 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 忽略这些设备。

查看设备状态

# 查看设备管理状态
nmcli device status

临时 unmanaged

如果只是临时测试,那么可以通过 nmcli 命令去设置某个网络设备为 unmanaged 状态。但是只要重启 NetworkManager 服务或者重启了主机,网络接口又会恢复为 managed 状态。

nmcli device set xxx managed no

永久 unmanaged

要想永久的排除 NetworkManager 管理某些网络设备,则需要通过配置文件去设置。

  1. 启用插件

    /etc/NetworkManager/NetworkManager.conf 配置文件的[main] 层级下启用插件 keyfile。

    [main]
    plugins=keyfile
  2. 创建 /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 地址来排除接口;
  3. 重新加载配置

    systemctl reload NetworkManager

禁用 Network Manager

配置的错误,或者配置更新不及时都可能导致不必要的问题,如果不是必须使用 NetworkManager 服务,一般情况还是建议禁用 Network Manager 服务。

在 centos 8.x 环境中,默认没有安装 network-scripts,禁止 Network Manager 服务后则无法重启网络,可以通过手动执行 yum -y install network-scripts 来安装。