主机网络配置

主机网络配置选项

背景

除非 以其他方式配置 ,Fedora CoreOS(FCOS)将在插入电缆的每个接口上尝试动态主机配置协议。但是,如果您需要使用静态寻址或更复杂的网络(VLAN、绑定、网桥、组等),您可以通过多种方法来实现,如下所述。无论您选择哪种方式来配置网络,最终都会作为NetworkManager的配置,它采用NetworkManager密钥文件的形式。可以找到有关密钥文件格式的更多信息 这里 。有关密钥文件的子选项的更多信息,请参阅 这里

配置选项

FCOS机器主要通过Ignition进行配置,Ignition在机器第一次引导时从initramf运行。根据平台的不同,机器可能需要网络访问以检索远程资源;要么是Ignition配置本身,要么是在Ignition配置中指定的远程资源。

只有在确定需要或用户明确请求时,才会在initramf中启动联网 rd.neednet=1

在initramf中,机器是否需要联网可以决定用户将如何为机器配置联网。为计算机配置网络的选项包括:

  • 通过内核参数

    • 这些文件在第一次引导时由initramf中的Dracut模块处理

  • 通过实时图像定制

    • 通过在实时ISO或PXE映像中嵌入网络配置

  • 通过 coreos-installer install --copy-network

    • 通过传播安装环境网络配置

  • 通过Afterburn

    • 通过应用各种平台注入的网络配置

  • 通过Ignition

    • 通过记录NetworkManager随后在启动时使用的文件

如果您需要网络连接来获取您的Ignition配置,或者如果您的Ignition具有远程引用,您将无法通过Ignition提供您的网络配置。
如果您以多种方式(例如,通过内核参数和通过Ignition)提供网络配置,则通过Ignition提供的配置将获胜,并应用于机器的真正根目录。不支持通过内核参数提供一半配置,通过Ignition提供一半配置。

我们现在将介绍这些选项中的每一个。

via Kernel Arguments

在机器第一次引导时,用户可以提供定义网络配置的内核参数。这些内核参数大多在 Dracut.cmdline手册页 。有几种不同的方法可以在第一次引导时应用这些内核参数。

1.在最一般的形式中,您可以在第一次引导(Ignition引导)时在GRUB提示符下停止一个实例,并将它们添加到现有的内核参数集中。

2.对于裸机安装,其中您通过添加的内核参数自动安装(即, coreos.inst.install_dev= ),您还可以在那里附加网络参数,它们将应用于安装引导和已安装计算机的第一次引导(Ignition引导)。

3.对于PXE引导,您可以在PXE配置中将网络内核参数添加到现有的内核参数集中。

静态配置IP地址的一组内核参数示例 ens2 看起来像是:

ip=10.10.10.10::10.10.10.1:255.255.255.0:myhostname:ens2:none:8.8.8.8

语法有点难以使用。使用它的一个简单方法是编写一个小脚本,它将为您填充这些项。对于上面的示例,应该可以使用下面这样的代码:

ip='10.10.10.10'
gateway='10.10.10.1'
netmask='255.255.255.0'
hostname='myhostname'
interface='ens2'
nameserver='8.8.8.8'
echo "ip=${ip}::${gateway}:${netmask}:${hostname}:${interface}:none:${nameserver}"

via live image customization

CoreOS-Installer允许您使用以下命令将NetworkManager密钥文件直接嵌入到实时ISO或PXE映像中 --network-keyfile 选项以 coreos-installer iso customizecoreos-installer pxe customize 。在Ignition运行之前,将在initramf中应用该配置。如果您还使用 --installer-config 选项或任何 --dest-* 用于配置自动安装的选项,或 --copy-network 选项手动安装时,网络配置将被转发到已安装的系统。

有关在实时映像中嵌入网络配置的更多详细信息,请参阅 实时ISO/PXE图像参考

via coreos-installer install --copy-network

对于手动裸机安装工作流,使用Dracut内核参数配置网络可能不可取:

  • 语法对用户不是很友好

  • 通过抓取GRUB提示符来操作内核参数可能很困难

这个 --copy-network 选项以 coreos-installer install 将从 /etc/NetworkManager/system-connections/ 目录安装到已安装的系统中。对于交互式安装,这允许用户在执行安装之前以各种方式填充网络配置:

  • 使用 nmcli 命令

  • 使用 nmtui TUI界面

  • 直接写入文件

  • 使用另一种可选工具

它还允许用户在节点上执行硬件发现(即“我的接口名称是什么?”)。有关此工作流的示例,请参见 此演示 它详细地展示了这一点。

via Afterburn

在某些平台上,Afterburn将在initramf期间注入由用户或平台配置的网络配置。

目前,这只在VMWare上使用。那里的实现允许用户以Dracut网络参数的形式指定网络配置,而不必停止机器引导并自己手动注入这些参数。

看见 Afterburn文档 以获取更多信息。

via Ignition

警告:如果您需要网络来获取您的Ignition配置,并且您的环境需要比默认的DHCP更复杂的网络来获取Ignition配置,那么您将需要使用除Ignition之外的其他方法来配置网络。

可以通过写出Ignition配置中描述的文件来执行网络配置。这些是 网络管理器密钥文件 被写入的 /etc/NetworkManager/system-connections/ 告诉网络管理器该做什么。

通过Ignition提供的任何配置都将被视为比为Fedora CoreOS实例配置网络的任何其他方法更高的优先级。如果通过Ignition指定网络配置,请尽量不要使用其他机制来配置网络。

举个例子 Butane 我们上面显示的相同静态网络示例的配置为:

variant: fcos
version: 1.4.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/ens2.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=ens2
          type=ethernet
          interface-name=ens2
          [ipv4]
          address1=10.10.10.10/24,10.10.10.1
          dns=8.8.8.8;
          dns-search=
          may-fail=false
          method=manual

主机网络配置示例

在本节中,我们将介绍使用Dracut内核参数和NetworkManager密钥文件通过Ignition/buane设置不同类型的网络设备的常见示例。

除非另有说明,否则本节中使用静态IP的示例将采用这些值:

ip='10.10.10.10'
gateway='10.10.10.1'
netmask='255.255.255.0'
prefix='24'
hostname='myhostname'
interface='ens2'
nameserver='8.8.8.8'
bondname='bond0'
teamname='team0'
bridgename='br0'
subnic1='ens2'
subnic2='ens3'
vlanid='100'
FCOS使用 可预测的接口名称 通过 默认设置 。请注意为您的硬件使用正确的接口名称。

使用以下工具生成NetworkManager密钥文件 nm-initrd-generator

NetworkManager提供了一个工具, NM-初始化-生成器 ,它可以从Dracut内核参数语法生成密钥文件。这可能是一种很好的方法,可以将内核参数转换为密钥文件,或者只需少量输入即可快速生成一些密钥文件,然后调整一些更详细的设置。

以下是通过以下方式为焊接生成密钥文件的示例 nm-initrd-generator

$ kargs="ip=bond0:dhcp bond=bond0:ens2,ens3:mode=active-backup,miimon=100 nameserver=8.8.8.8"
$ /usr/libexec/nm-initrd-generator -s -- $kargs

*** Connection 'bond0' ***

[connection]
id=bond0
uuid=643c17b5-b364-4137-b273-33f450a45476
type=bond
interface-name=bond0
multi-connect=1
permissions=

[ethernet]
mac-address-blacklist=

[bond]
miimon=100
mode=active-backup

[ipv4]
dns=8.8.8.8;
dns-search=
may-fail=false
method=auto

[ipv6]
addr-gen-mode=eui64
dns-search=
method=auto

[proxy]

*** Connection 'ens3' ***

[connection]
id=ens3
uuid=b42cc917-fd87-47df-9ac2-34622ecddd8c
type=ethernet
interface-name=ens3
master=643c17b5-b364-4137-b273-33f450a45476
multi-connect=1
permissions=
slave-type=bond

[ethernet]
mac-address-blacklist=

*** Connection 'ens2' ***

[connection]
id=ens2
uuid=e111bb4e-3ee3-4612-afc2-1d2dfff97671
type=ethernet
interface-name=ens2
master=643c17b5-b364-4137-b273-33f450a45476
multi-connect=1
permissions=
slave-type=bond

[ethernet]
mac-address-blacklist=

此运行将生成三个密钥文件。一张是 bond0 ,一个用于 ens3 ,和一个用于 ens2 。您可以获取生成的输出、添加更多设置或调整现有设置,然后通过Ignition传递文件。

配置静态IP

Dracut Kernel Arguments

模板
ip=${ip}::${gateway}:${netmask}:${hostname}:${interface}:none:${nameserver}
渲染
ip=10.10.10.10::10.10.10.1:255.255.255.0:myhostname:ens2:none:8.8.8.8

Butane config

模板
variant: fcos
version: 1.4.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/${interface}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${interface}
          type=ethernet
          interface-name=${interface}
          [ipv4]
          address1=${ip}/${prefix},${gateway}
          dhcp-hostname=${hostname}
          dns=${nameserver};
          dns-search=
          may-fail=false
          method=manual
渲染
variant: fcos
version: 1.4.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/ens2.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=ens2
          type=ethernet
          interface-name=ens2
          [ipv4]
          address1=10.10.10.10/24,10.10.10.1
          dhcp-hostname=myhostname
          dns=8.8.8.8;
          dns-search=
          may-fail=false
          method=manual

配置绑定(静态IP)

Dracut Kernel Arguments

模板
ip=${ip}::${gateway}:${netmask}:${hostname}:${bondname}:none:${nameserver}
bond=${bondname}:${subnic1},${subnic2}:mode=active-backup,miimon=100
渲染
ip=10.10.10.10::10.10.10.1:255.255.255.0:myhostname:bond0:none:8.8.8.8
bond=bond0:ens2,ens3:mode=active-backup,miimon=100

Butane config

模板
variant: fcos
version: 1.4.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/${bondname}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bondname}
          type=bond
          interface-name=${bondname}
          [bond]
          miimon=100
          mode=active-backup
          [ipv4]
          address1=${ip}/${prefix},${gateway}
          dhcp-hostname=${hostname}
          dns=${nameserver};
          dns-search=
          may-fail=false
          method=manual
    - path: /etc/NetworkManager/system-connections/${bondname}-slave-${subnic1}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bondname}-slave-${subnic1}
          type=ethernet
          interface-name=${subnic1}
          master=${bondname}
          slave-type=bond
    - path: /etc/NetworkManager/system-connections/${bondname}-slave-${subnic2}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bondname}-slave-${subnic2}
          type=ethernet
          interface-name=${subnic2}
          master=${bondname}
          slave-type=bond
渲染
variant: fcos
version: 1.4.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/bond0.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=bond0
          type=bond
          interface-name=bond0
          [bond]
          miimon=100
          mode=active-backup
          [ipv4]
          address1=10.10.10.10/24,10.10.10.1
          dhcp-hostname=myhostname
          dns=8.8.8.8;
          dns-search=
          may-fail=false
          method=manual
    - path: /etc/NetworkManager/system-connections/bond0-slave-ens2.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=bond0-slave-ens2
          type=ethernet
          interface-name=ens2
          master=bond0
          slave-type=bond
    - path: /etc/NetworkManager/system-connections/bond0-slave-ens3.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=bond0-slave-ens3
          type=ethernet
          interface-name=ens3
          master=bond0
          slave-type=bond

配置网桥(DHCP)

Dracut Kernel Arguments

模板
ip=${bridgename}:dhcp
bridge=${bridgename}:${subnic1},${subnic2}
渲染
ip=br0:dhcp
bridge=br0:ens2,ens3

Butane config

模板
variant: fcos
version: 1.4.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/${bridgename}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bridgename}
          type=bridge
          interface-name=${bridgename}
          [bridge]
          [ipv4]
          dns-search=
          may-fail=false
          method=auto
    - path: /etc/NetworkManager/system-connections/${bridgename}-slave-${subnic1}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bridgename}-slave-${subnic1}
          type=ethernet
          interface-name=${subnic1}
          master=${bridgename}
          slave-type=bridge
          [bridge-port]
    - path: /etc/NetworkManager/system-connections/${bridgename}-slave-${subnic2}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bridgename}-slave-${subnic2}
          type=ethernet
          interface-name=${subnic2}
          master=${bridgename}
          slave-type=bridge
          [bridge-port]
渲染
variant: fcos
version: 1.4.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/br0.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=br0
          type=bridge
          interface-name=br0
          [bridge]
          [ipv4]
          dns-search=
          may-fail=false
          method=auto
    - path: /etc/NetworkManager/system-connections/br0-slave-ens2.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=br0-slave-ens2
          type=ethernet
          interface-name=ens2
          master=br0
          slave-type=bridge
          [bridge-port]
    - path: /etc/NetworkManager/system-connections/br0-slave-ens3.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=br0-slave-ens3
          type=ethernet
          interface-name=ens3
          master=br0
          slave-type=bridge
          [bridge-port]

配置组(DHCP)

Dracut Kernel Arguments

模板
ip=${teamname}:dhcp
team=${teamname}:${subnic1},${subnic2}
渲染
ip=team0:dhcp
team=team0:ens2,ens3

Butane config

模板
variant: fcos
version: 1.4.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/${teamname}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${teamname}
          type=team
          interface-name=${teamname}
          [team]
          config={"runner": {"name": "activebackup"}, "link_watch": {"name": "ethtool"}}
          [ipv4]
          dns-search=
          may-fail=false
          method=auto
    - path: /etc/NetworkManager/system-connections/${teamname}-slave-${subnic1}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${teamname}-slave-${subnic1}
          type=ethernet
          interface-name=${subnic1}
          master=${teamname}
          slave-type=team
          [team-port]
          config={"prio": 100}
    - path: /etc/NetworkManager/system-connections/${teamname}-slave-${subnic2}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${teamname}-slave-${subnic2}
          type=ethernet
          interface-name=${subnic2}
          master=${teamname}
          slave-type=team
          [team-port]
          config={"prio": 100}
渲染
variant: fcos
version: 1.4.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/team0.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=team0
          type=team
          interface-name=team0
          [team]
          config={"runner": {"name": "activebackup"}, "link_watch": {"name": "ethtool"}}
          [ipv4]
          dns-search=
          may-fail=false
          method=auto
    - path: /etc/NetworkManager/system-connections/team0-slave-ens2.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=team0-slave-ens2
          type=ethernet
          interface-name=ens2
          master=team0
          slave-type=team
          [team-port]
          config={"prio": 100}
    - path: /etc/NetworkManager/system-connections/team0-slave-ens3.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=team0-slave-ens3
          type=ethernet
          interface-name=ens3
          master=team0
          slave-type=team
          [team-port]
          config={"prio": 100}

配置VLAN(静态IP)

Dracut Kernel Arguments

模板
ip=${ip}::${gateway}:${netmask}:${hostname}:${interface}.${vlanid}:none:${nameserver}
vlan=${interface}.${vlanid}:${interface}
渲染
ip=10.10.10.10::10.10.10.1:255.255.255.0:myhostname:ens2.100:none:8.8.8.8
vlan=ens2.100:ens2

Butane config

模板
variant: fcos
version: 1.4.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/${interface}.${vlanid}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${interface}.${vlanid}
          type=vlan
          interface-name=${interface}.${vlanid}
          [vlan]
          egress-priority-map=
          flags=1
          id=${vlanid}
          ingress-priority-map=
          parent=${interface}
          [ipv4]
          address1=${ip}/${prefix},${gateway}
          dhcp-hostname=${hostname}
          dns=${nameserver};
          dns-search=
          may-fail=false
          method=manual
    - path: /etc/NetworkManager/system-connections/${interface}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${interface}
          type=ethernet
          interface-name=${interface}
          [ipv4]
          dns-search=
          method=disabled
          [ipv6]
          addr-gen-mode=eui64
          dns-search=
          method=disabled
渲染
variant: fcos
version: 1.4.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/ens2.100.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=ens2.100
          type=vlan
          interface-name=ens2.100
          [vlan]
          egress-priority-map=
          flags=1
          id=100
          ingress-priority-map=
          parent=ens2
          [ipv4]
          address1=10.10.10.10/24,10.10.10.1
          dhcp-hostname=myhostname
          dns=8.8.8.8;
          dns-search=
          may-fail=false
          method=manual
    - path: /etc/NetworkManager/system-connections/ens2.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=ens2
          type=ethernet
          interface-name=ens2
          [ipv4]
          dns-search=
          method=disabled
          [ipv6]
          addr-gen-mode=eui64
          dns-search=
          method=disabled

在绑定上配置VLAN(动态主机配置协议)

Dracut Kernel Arguments

模板
ip=${bondname}.${vlanid}:dhcp
bond=${bondname}:${subnic1},${subnic2}:mode=active-backup,miimon=100
vlan=${bondname}.${vlanid}:${bondname}
渲染
ip=bond0.100:dhcp
bond=bond0:ens2,ens3:mode=active-backup,miimon=100
vlan=bond0.100:bond0

Butane config

模板
variant: fcos
version: 1.4.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/${bondname}.${vlanid}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bondname}.${vlanid}
          type=vlan
          interface-name=${bondname}.${vlanid}
          [vlan]
          egress-priority-map=
          flags=1
          id=${vlanid}
          ingress-priority-map=
          parent=${bondname}
          [ipv4]
          dns-search=
          may-fail=false
          method=auto
    - path: /etc/NetworkManager/system-connections/${bondname}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bondname}
          type=bond
          interface-name=${bondname}
          [bond]
          miimon=100
          mode=active-backup
          [ipv4]
          method=disabled
          [ipv6]
          method=disabled
    - path: /etc/NetworkManager/system-connections/${bondname}-slave-${subnic1}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bondname}-slave-${subnic1}
          type=ethernet
          interface-name=${subnic1}
          master=${bondname}
          slave-type=bond
    - path: /etc/NetworkManager/system-connections/${bondname}-slave-${subnic2}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bondname}-slave-${subnic2}
          type=ethernet
          interface-name=${subnic2}
          master=${bondname}
          slave-type=bond
渲染
variant: fcos
version: 1.4.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/bond0.100.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=bond0.100
          type=vlan
          interface-name=bond0.100
          [vlan]
          egress-priority-map=
          flags=1
          id=100
          ingress-priority-map=
          parent=bond0
          [ipv4]
          dns-search=
          may-fail=false
          method=auto
    - path: /etc/NetworkManager/system-connections/bond0.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=bond0
          type=bond
          interface-name=bond0
          [bond]
          miimon=100
          mode=active-backup
          [ipv4]
          method=disabled
          [ipv6]
          method=disabled
    - path: /etc/NetworkManager/system-connections/bond0-slave-ens2.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=bond0-slave-ens2
          type=ethernet
          interface-name=ens2
          master=bond0
          slave-type=bond
    - path: /etc/NetworkManager/system-connections/bond0-slave-ens3.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=bond0-slave-ens3
          type=ethernet
          interface-name=ens3
          master=bond0
          slave-type=bond

禁用以太网设备的自动配置

默认情况下,FCOS将尝试在插入电缆的每个接口上自动配置(DHCP/SLAAC)。在某些网络环境中,这可能并不可取。可以使用配置文件拖放来更改NetworkManager的此行为:

禁用以太网设备的NetworkManager自动配置
variant: fcos
version: 1.4.0
storage:
  files:
    - path: /etc/NetworkManager/conf.d/noauto.conf
      mode: 0644
      contents:
        inline: |
          [main]
          # Do not do automatic (DHCP/SLAAC) configuration on ethernet devices
          # with no other matching connections.
          no-auto-default=*

警告:如果禁用了以太网设备的NetworkManager自动配置,并且未提供其他网络配置,则系统将在没有网络访问的情况下启动。