第 24 章 Kubernetes NMState


24.1. 观察和更新节点网络状态和配置

安装 Kubernetes NMState Operator 后,您可以使用 Operator 观察和更新集群的节点网络状态和网络配置。

有关如何安装 NMState Operator 的更多信息,请参阅 Kubernetes NMState Operator

24.1.1. 使用 CLI 查看节点的网络状态

节点网络状态是集群中所有节点的网络配置。一个 NodeNetworkState 对象存在于集群中的每个节点上。此对象定期更新,并捕获该节点的网络状态。

流程

  1. 列出集群中的所有 NodeNetworkState 对象:

    $ oc get nns
  2. 检查 NodeNetworkState 对象以查看该节点上的网络。为了清楚,这个示例中的输出已被重新编辑:

    $ oc get nns node01 -o yaml

    输出示例

    apiVersion: nmstate.io/v1
    kind: NodeNetworkState
    metadata:
      name: node01 1
    status:
      currentState: 2
        dns-resolver:
    # ...
        interfaces:
    # ...
        route-rules:
    # ...
        routes:
    # ...
      lastSuccessfulUpdateTime: "2020-01-31T12:14:00Z" 3

    1
    NodeNetworkState 对象的名称从节点获取。
    2
    currentState 包含节点的完整网络配置,包括 DNS 、接口和路由。
    3
    最新成功更新的时间戳。只要节点可以被访问,这个时间戳就会定期更新,它可以用来指示报告的新旧程度。

24.1.2. 从 Web 控制台查看节点的网络状态

作为管理员,您可以使用 OpenShift Container Platform Web 控制台观察 NodeNetworkState 资源和网络接口,并访问网络详情。

流程

  1. 进入到 Networking NodeNetworkState

    NodeNetworkState 页面中,您可以查看 NodeNetworkState 资源列表以及节点上创建的对应接口。您可以基于接口状态, 接口类型, 和 IP 进行过滤,或者使用基于条件名称标签的搜索栏来缩小显示的 NodeNetworkState 资源范围。

  2. 要访问 NodeNetworkState 资源的详细信息,请点 Name 列中列出的 NodeNetworkState 资源名称。
  3. 要展开并查看 NodeNetworkState 资源的 Network Details 部分,点 > 图标。或者,您也可以点 Network interface 列下的每个接口类型来查看网络详情。

24.1.3. 从 Web 控制台管理策略

您可以通过将 NodeNetworkConfigurationPolicy 清单应用到集群来更新节点网络的配置,如为节点添加或删除接口。通过访问 Networking 菜单下的 NodeNetworkConfigurationPolicy 页面中创建的策略列表,从 web 控制台管理策略。通过此页面,您可以创建、更新、监控和删除策略。

24.1.3.1. 监控策略状态

您可以在 NodeNetworkConfigurationPolicy 页面中监控策略状态。本页以表格格式显示集群中创建的所有策略,其列如下:

Name
创建的策略的名称。
匹配的节点
应用策略的节点计数。这可能是基于节点选择器或集群中的所有节点的节点子集。
节点网络状态
匹配节点的 Enactment 状态。您可以点 enactment 状态并查看状态的详细信息。

要查找所需的策略,您可以使用 Filter 选项或搜索选项根据 enactment 状态过滤列表。

24.1.3.2. 创建策略

您可以使用 web 控制台中的表单或 YAML 创建策略。

流程

  1. 进入到 Networking NodeNetworkConfigurationPolicy
  2. NodeNetworkConfigurationPolicy 页面中,点 Create,然后选择 From Form 选项。

    如果没有现有策略,您可以使用表单点 Create NodeNetworkConfigurationPolicy 来创建策略。

    注意

    要使用 YAML 创建策略,请点 Create,然后选择 With YAML 选项。以下步骤仅适用于使用表单创建策略。

  3. 可选:选择 Apply this NodeNetworkConfigurationPolicy only to specific subsets of nodes using the node selector 复选框,以指定必须应用策略的节点。
  4. Policy name 字段中输入策略名称。
  5. 可选:在 Description 字段中输入策略的描述。
  6. 可选:在 Policy Interface (s) 部分中,默认添加了一个桥接接口,带有可编辑的字段中的预设置值。通过执行以下步骤来编辑值:

    1. Interface name 字段中输入接口名称。
    2. Network 状态下拉菜单中选择网络状态。默认选择的值是 Up
    3. 类型下拉菜单中选择接口类型。可用的值包括 Bridge, Bonding, 和 Ethernet。默认选择的值是 Bridge

      注意

      不支持使用表单添加 VLAN 接口。要添加 VLAN 接口,您必须使用 YAML 来创建策略。添加后,您无法使用表单编辑策略。

    4. 可选: 在 IP 配置部分中,选中 IPv4 复选框,为接口分配 IPv4 地址,并配置 IP 地址分配详情:

      1. IP 地址,将接口配置为使用静态 IP 地址;或点 DHCP 将接口配置为自动分配 IP 地址。
      2. 如果您选择了 IP 地址 选项,在 IPV4 address 字段中输入 IPv4 地址,并在 Prefix length 字段中输入前缀长度。

        如果您选择了 DHCP 选项,请取消选择您要禁用的选项。可用选项包括 Auto-DNSAuto-routesAuto-gateway。所有选项都被默认选择。

    5. 可选:在 Port 字段中输入端口号。
    6. 可选: 选中启用 STP复选框以启用 STP。
    7. 可选: 要为策略添加一个接口,点 Add another interface to the policy
    8. 可选: 要从策略中删除接口,点接口旁的 图标。
    注意

    或者,您可以点页面顶部的 Edit YAML 继续使用 YAML 编辑表单。

  7. Create 以完成策略创建。

24.1.3.3. 更新策略

24.1.3.3.1. 使用表单更新策略

流程

  1. 进入到 Networking NodeNetworkConfigurationPolicy
  2. NodeNetworkConfigurationPolicy 页面中,点您要编辑的策略旁的 kebab 图标,然后点 Edit
  3. 编辑您要更新的字段。
  4. 点击 Save
注意

不支持使用表单添加 VLAN 接口。要添加 VLAN 接口,您必须使用 YAML 来创建策略。添加后,您无法使用表单编辑策略。

24.1.3.3.2. 使用 YAML 更新策略

流程

  1. 进入到 Networking NodeNetworkConfigurationPolicy
  2. NodeNetworkConfigurationPolicy 页面中,点您要编辑的策略的 Name 列下的策略名称。
  3. YAML 选项卡,并编辑 YAML。
  4. 点击 Save

24.1.3.4. 删除策略

流程

  1. 进入到 Networking NodeNetworkConfigurationPolicy
  2. NodeNetworkConfigurationPolicy 页面中,点您要删除的策略旁的 kebab 图标,然后点 Delete
  3. 在弹出窗口中,输入策略名称以确认删除,然后点 Delete

24.1.4. 使用 CLI 管理策略

24.1.4.1. 在节点上创建接口

通过将一个 NodeNetworkConfigurationPolicy 清单应用到集群来在集群的节点上创建一个接口。清单详细列出了请求的接口配置。

默认情况下,清单会应用到集群中的所有节点。要将接口只添加到特定的节点,在节点选择器上添加 spec: nodeSelector 参数和适当的 <key>:<value>

您可以同时配置多个支持 nmstate 节点。该配置适用于并行节点的 50%。如果网络连接失败,此策略可防止整个集群不可用。要将策略配置并行应用到集群的特定部分,请使用 maxUnavailable 字段。

流程

  1. 创建 NodeNetworkConfigurationPolicy 清单。以下示例在所有 worker 节点上配置了一个 Linux 桥接并配置 DNS 解析器:

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
      name: br1-eth1-policy 1
    spec:
      nodeSelector: 2
        node-role.kubernetes.io/worker: "" 3
      maxUnavailable: 3 4
      desiredState:
        interfaces:
          - name: br1
            description: Linux bridge with eth1 as a port 5
            type: linux-bridge
            state: up
            ipv4:
              dhcp: true
              enabled: true
              auto-dns: false
            bridge:
              options:
                stp:
                  enabled: false
              port:
                - name: eth1
        dns-resolver: 6
          config:
            search:
            - example.com
            - example.org
            server:
            - 8.8.8.8
    1
    策略的名称。
    2
    可选: 如果没有包括 nodeSelector 参数,策略会应用到集群中的所有节点。
    3
    本例使用 node-role.kubernetes.io/worker:"" 节点选择器来选择集群中的所有 worker 节点。
    4
    可选:指定策略配置可同时应用到的最大 nmstate 节点数。这个参数可以设置为百分比值(字符串),如 "10%",也可以是绝对值(数字),如 3
    5
    可选:接口人类可读的描述。
    6
    可选:指定 DNS 服务器的搜索和服务器设置。
  2. 创建节点网络策略:

    $ oc apply -f br1-eth1-policy.yaml 1
    1
    节点网络配置策略清单的文件名。

其他资源

24.1.4.2. 确认节点上的节点网络策略更新

NodeNetworkConfigurationPolicy 清单描述了您为集群中的节点请求的网络配置。节点网络策略包括您请求的网络配置以及整个集群中的策略执行状态。

当您应用节点网络策略时,会为集群中的每个节点创建一个 NodeNetworkConfigurationEnactment 对象。节点网络配置是一个只读对象,代表在该节点上执行策略的状态。如果策略在节点上应用失败,则该节点会包括 traceback 用于故障排除。

流程

  1. 要确认策略已应用到集群,请列出策略及其状态:

    $ oc get nncp
  2. 可选:如果策略配置成功的时间比预期的要长,您可以检查特定策略请求的状态和状态条件:

    $ oc get nncp <policy> -o yaml
  3. 可选:如果策略在所有节点上配置成功的时间比预期的要长,您可以列出集群中的 Enactments 的状态:

    $ oc get nnce
  4. 可选:要查看特定的 Enactment 的配置,包括对失败配置进行任何错误报告:

    $ oc get nnce <node>.<policy> -o yaml

24.1.4.3. 从节点中删除接口

您可以通过编辑 NodeNetworkConfigurationPolicy 对象从集群中的一个或多个节点中删除接口,并将接口的状态设置为 absent

从节点中删除接口不会自动将节点网络配置恢复到以前的状态。如果要恢复之前的状态,则需要在策略中定义节点网络配置。

如果删除了网桥或绑定接口,以前附加到该网桥或绑定接口的任何节点 NIC 都会处于 down 状态并变得不可访问。为了避免连接丢失,在相同策略中配置节点 NIC,使其具有 up 状态,以及使用 DHCP 或一个静态 IP 地址。

注意

删除添加接口的节点网络策略不会更改节点上的策略配置。虽然 NodeNetworkConfigurationPolicy 是集群中的一个对象,但它只代表请求的配置。
同样,删除接口不会删除策略。

流程

  1. 更新用来创建接口的 NodeNetworkConfigurationPolicy 清单。以下示例删除了 Linux 网桥,并使用 DHCP 配置 eth1 NIC 以避免断开连接:

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
      name: <br1-eth1-policy> 1
    spec:
      nodeSelector: 2
        node-role.kubernetes.io/worker: "" 3
      desiredState:
        interfaces:
        - name: br1
          type: linux-bridge
          state: absent 4
        - name: eth1 5
          type: ethernet 6
          state: up 7
          ipv4:
            dhcp: true 8
            enabled: true 9
    1
    策略的名称。
    2
    可选: 如果没有包括 nodeSelector 参数,策略会应用到集群中的所有节点。
    3
    本例使用 node-role.kubernetes.io/worker:"" 节点选择器来选择集群中的所有 worker 节点。
    4
    将状态改为 absent 会删除接口。
    5
    要从网桥接口中取消附加的接口名称。
    6
    接口的类型。这个示例创建了以太网网络接口。
    7
    接口的请求状态。
    8
    可选:如果您不使用 dhcp,可以设置静态 IP,或让接口没有 IP 地址。
    9
    在这个示例中启用 ipv4
  2. 更新节点上的策略并删除接口:

    $ oc apply -f <br1-eth1-policy.yaml> 1
    1
    策略清单的文件名。

24.1.5. 不同接口的策略配置示例

在读取不同示例 NodeNetworkConfigurationPolicy (NNCP)清单配置前,请在应用策略时请考虑以下因素,以便集群在其最佳性能条件下运行:

  • 当您需要将策略应用到多个节点时,为每个目标节点创建一个 NodeNetworkConfigurationPolicy 清单。Kubernetes NMState Operator 以未指定顺序将策略应用到每个节点。使用此方法限制策略会缩短策略应用程序的时长,但如果集群的配置中出现错误,则可能会有在集群范围内出现运行中断的风险。为了避免这种类型的错误,首先将 NNCP 应用到某些节点,并在确认它们是否已正确配置后,继续执行将策略应用到剩余的节点。
  • 当您需要将策略应用到多个节点时,但只想为所有目标节点创建一个 NNCP,Kubernetes NMState Operator 会按顺序将策略应用到每个节点。您可以使用集群配置中的 maxUnavailable 参数为目标节点设置策略应用程序的速度和覆盖范围。通过为参数设置一个较低的百分比值,您可以在中断只会影响接收策略应用程序的一小部分节点时,降低出现集群范围中断的风险。
  • 考虑在单个策略中指定所有相关网络配置。
  • 当节点重启时,Kubernetes NMState Operator 无法控制它将策略应用到节点的顺序。Kubernetes NMState Operator 可能会按顺序应用相互独立的策略,这会导致网络对象降级。

24.1.5.1. 示例: Linux bridge interface 节点网络配置策略

通过将一个 NodeNetworkConfigurationPolicy 清单应用到集群来在集群的节点上创建一个 Linux 网桥接口。

以下 YAML 文件是 Linux 网桥界面的清单示例。如果运行 playbook,其中会包含必须替换为您自己的信息的样本值。

apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
  name: br1-eth1-policy 1
spec:
  nodeSelector: 2
    kubernetes.io/hostname: <node01> 3
  desiredState:
    interfaces:
      - name: br1 4
        description: Linux bridge with eth1 as a port 5
        type: linux-bridge 6
        state: up 7
        ipv4:
          dhcp: true 8
          enabled: true 9
        bridge:
          options:
            stp:
              enabled: false 10
          port:
            - name: eth1 11
1
策略的名称。
2
可选: 如果没有包括 nodeSelector 参数,策略会应用到集群中的所有节点。
3
这个示例使用 hostname 节点选择器。
4
接口的名称。
5
可选:接口人类可读的接口描述。
6
接口的类型。这个示例会创建一个桥接。
7
创建后接口的请求状态。
8
可选:如果您不使用 dhcp,可以设置静态 IP,或让接口没有 IP 地址。
9
在这个示例中启用 ipv4
10
在这个示例中禁用 stp
11
网桥附加到的节点 NIC。

24.1.5.2. 示例:VLAN 接口节点网络配置策略

通过将一个 NodeNetworkConfigurationPolicy 清单应用到集群来在集群的节点上创建一个 VLAN 接口。

注意

在单个 NodeNetworkConfigurationPolicy 清单中为节点的 VLAN 接口定义所有相关配置。例如,在同一 NodeNetworkConfigurationPolicy 清单中为节点定义 VLAN 接口和相关路由。

当节点重启时,Kubernetes NMState Operator 无法控制应用策略的顺序。因此,如果您将单独的策略用于相关的网络配置,Kubernetes NMState Operator 可能会按顺序应用这些策略,从而导致网络对象降级。

以下 YAML 文件是 VLAN 接口的清单示例。如果运行 playbook,其中会包含必须替换为您自己的信息的样本值。

apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
  name: vlan-eth1-policy 1
spec:
  nodeSelector: 2
    kubernetes.io/hostname: <node01> 3
  desiredState:
    interfaces:
    - name: eth1.102 4
      description: VLAN using eth1 5
      type: vlan 6
      state: up 7
      vlan:
        base-iface: eth1 8
        id: 102 9
1
策略的名称。
2
可选: 如果没有包括 nodeSelector 参数,策略会应用到集群中的所有节点。
3
这个示例使用 hostname 节点选择器。
4
接口的名称。当在裸机上部署时,只支持 <interface_name>.<vlan_number> VLAN 格式。
5
可选:接口人类可读的接口描述。
6
接口的类型。这个示例创建了一个 VLAN。
7
创建后接口的请求状态。
8
附加 VLAN 的节点 NIC。
9
VLAN 标签。

24.1.5.3. 示例:虚拟功能的节点网络配置策略(技术预览)

通过应用 NodeNetworkConfigurationPolicy 清单,更新现有集群中的单根 I/O 虚拟化 (SR-IOV) 网络功能 (VF) 的主机网络设置。

重要

为 SR-IOV 网络 VF 更新主机网络设置只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

您可以将 NodeNetworkConfigurationPolicy 清单应用到现有集群,以完成以下任务:

  • 为 VF 配置 QoS 主机网络设置以优化性能。
  • 为网络接口添加、删除或更新 VF。
  • 管理 VF 绑定配置。
注意

要在也通过 SR-IOV Network Operator 管理的物理功能上使用 NMState 更新 SR-IOV VF 的主机网络设置,您必须将相关 SriovNetworkNodePolicy 资源中的 externallyManaged 参数设置为 true。如需更多信息,请参阅附加资源部分

以下 YAML 文件是一个清单示例,它为 VF 定义 QoS 策略。此文件包含必须替换为您自己的信息的样本值。

apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
  name: qos 1
spec:
  nodeSelector: 2
    node-role.kubernetes.io/worker: "" 3
  desiredState:
    interfaces:
      - name: ens1f0 4
        description: Change QOS on VF0 5
        type: ethernet 6
        state: up 7
        ethernet:
         sr-iov:
           total-vfs: 3 8
           vfs:
           - id: 0 9
             max-tx-rate: 200 10
1
策略的名称。
2
可选: 如果没有包括 nodeSelector 参数,策略会应用到集群中的所有节点。
3
本例适用于具有 worker 角色的所有节点。
4
物理功能(PF)网络接口的名称。
5
可选:接口人类可读的接口描述。
6
接口的类型。
7
配置后接口的请求状态。
8
VF 的总数。
9
标识 ID 为 0 的 VF。
10
为 VF 设置最大传输率(以 Mbps 为单位)。此示例值设置 200 Mbps 的速度。

以下 YAML 文件是一个清单示例,它在 VF 上创建 VLAN 接口并将其添加到绑定的网络接口中。如果运行 playbook,其中会包含必须替换为您自己的信息的样本值。

apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
  name: addvf 1
spec:
  nodeSelector: 2
    node-role.kubernetes.io/worker: "" 3
  maxUnavailable: 3
  desiredState:
    interfaces:
      - name: ens1f0v1 4
        type: ethernet
        state: up
      - name: ens1f0v1.477 5
        type: vlan
        state: up
        vlan:
          base-iface: ens1f0v1 6
          id: 477
      - name: bond0 7
        description: Add vf 8
        type: bond 9
        state: up 10
        link-aggregation:
          mode: active-backup 11
          options:
            primary: ens1f1v0.477 12
          port: 13
            - ens1f1v0.477
            - ens1f0v0.477
            - ens1f0v1.477 14
1
策略的名称。
2
可选: 如果没有包括 nodeSelector 参数,策略会应用到集群中的所有节点。
3
本例适用于具有 worker 角色的所有节点。
4
VF 网络接口的名称。
5
VLAN 网络接口的名称。
6
附加 VLAN 接口的 VF 网络接口。
7
绑定网络接口的名称。
8
可选:接口人类可读的接口描述。
9
接口的类型。
10
配置后接口的请求状态。
11
绑定的绑定策略。
12
主附加绑定端口。
13
绑定网络接口的端口。
14
在本例中,此 VLAN 网络接口作为额外接口添加到绑定网络接口。

24.1.5.4. 示例:绑定接口节点网络配置策略

通过将一个 NodeNetworkConfigurationPolicy 清单应用到集群来在集群的节点上创建一个绑定接口。

注意

OpenShift Container Platform 只支持以下绑定模式:

  • mode=1 active-backup
  • mode=2 balance-xor
  • mode=4 802.3ad

不支持其他绑定模式。

以下 YAML 文件是绑定接口的清单示例。如果运行 playbook,其中会包含必须替换为您自己的信息的样本值。

apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
  name: bond0-eth1-eth2-policy 1
spec:
  nodeSelector: 2
    kubernetes.io/hostname: <node01> 3
  desiredState:
    interfaces:
    - name: bond0 4
      description: Bond with ports eth1 and eth2 5
      type: bond 6
      state: up 7
      ipv4:
        dhcp: true 8
        enabled: true 9
      link-aggregation:
        mode: active-backup 10
        options:
          miimon: '140' 11
        port: 12
        - eth1
        - eth2
      mtu: 1450 13
1
策略的名称。
2
可选: 如果没有包括 nodeSelector 参数,策略会应用到集群中的所有节点。
3
这个示例使用 hostname 节点选择器。
4
接口的名称。
5
可选:接口人类可读的接口描述。
6
接口的类型。这个示例创建了一个绑定。
7
创建后接口的请求状态。
8
可选:如果您不使用 dhcp,可以设置静态 IP,或让接口没有 IP 地址。
9
在这个示例中启用 ipv4
10
Bond 的驱动模式。这个示例使用 active 备份模式。
11
可选:本例使用 miimon 检查每 140ms 的绑定链接。
12
绑定中的下级节点 NIC。
13
可选:绑定的最大传输单元(MTU)。如果没有指定,其默认值为 1500

24.1.5.5. 示例:以太网接口节点网络配置策略

通过将 NodeNetworkConfigurationPolicy 清单应用到集群,在集群的节点上配置以太网接口。

以下 YAML 文件是一个以太接口的清单示例。它包含了示例值,需要使用自己的信息替换。

apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
  name: eth1-policy 1
spec:
  nodeSelector: 2
    kubernetes.io/hostname: <node01> 3
  desiredState:
    interfaces:
    - name: eth1 4
      description: Configuring eth1 on node01 5
      type: ethernet 6
      state: up 7
      ipv4:
        dhcp: true 8
        enabled: true 9
1
策略的名称。
2
可选: 如果没有包括 nodeSelector 参数,策略会应用到集群中的所有节点。
3
这个示例使用 hostname 节点选择器。
4
接口的名称。
5
可选:接口人类可读的接口描述。
6
接口的类型。这个示例创建了以太网网络接口。
7
创建后接口的请求状态。
8
可选:如果您不使用 dhcp,可以设置静态 IP,或让接口没有 IP 地址。
9
在这个示例中启用 ipv4

24.1.5.6. 示例:同一节点网络配置策略中的多个接口

您可以在相同的节点网络配置策略中创建多个接口。这些接口可以相互引用,允许您使用单个策略清单来构建和部署网络配置。

以下示例 YAML 文件在两个 NIC 和 VLAN 之间创建一个名为 bond10 的绑定,名为 bond10.103,它连接到绑定。

apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
  name: bond-vlan 1
spec:
  nodeSelector: 2
    kubernetes.io/hostname: <node01> 3
  desiredState:
    interfaces:
    - name: bond10 4
      description: Bonding eth2 and eth3 5
      type: bond 6
      state: up 7
      link-aggregation:
        mode: balance-xor 8
        options:
          miimon: '140' 9
        port: 10
        - eth2
        - eth3
    - name: bond10.103 11
      description: vlan using bond10 12
      type: vlan 13
      state: up 14
      vlan:
         base-iface: bond10 15
         id: 103 16
      ipv4:
        dhcp: true 17
        enabled: true 18
1
策略的名称。
2
可选: 如果没有包括 nodeSelector 参数,策略会应用到集群中的所有节点。
3
这个示例使用 hostname 节点选择器。
4 11
接口的名称。
5 12
可选:接口人类可读的接口描述。
6 13
接口的类型。
7 14
创建后接口的请求状态。
8
Bond 的驱动模式。
9
可选:本例使用 miimon 检查每 140ms 的绑定链接。
10
绑定中的下级节点 NIC。
15
附加 VLAN 的节点 NIC。
16
VLAN 标签。
17
可选:如果您不使用 dhcp,可以设置静态 IP,或者让接口没有 IP 地址。
18
在这个示例中启用 ipv4。

24.1.5.7. 示例:带有 VRF 实例网络配置策略的网络接口

通过应用 NodeNetworkConfigurationPolicy 自定义资源(CR)将虚拟路由和转发(VRF)实例与网络接口关联。

重要

将 VRF 实例与网络接口关联只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

通过将 VRF 实例与网络接口关联,您可以支持流量隔离、独立路由决策和网络资源的逻辑分离。

在裸机环境中,您可以使用 MetalLB 通过属于 VRF 实例的接口宣布负载均衡器服务。如需更多信息,请参阅附加资源部分

以下 YAML 文件是一个将 VRF 实例与网络接口关联的示例。如果运行 playbook,其中会包含必须替换为您自己的信息的样本值。

apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
  name: vrfpolicy 1
spec:
  nodeSelector:
    vrf: "true" 2
  maxUnavailable: 3
  desiredState:
    interfaces:
      - name: ens4vrf 3
        type: vrf 4
        state: up
        vrf:
          port:
            - ens4 5
          route-table-id: 2 6
1
策略的名称。
2
这个示例将策略应用到带有 vrf:true 标签的所有节点。
3
接口的名称。
4
接口的类型。这个示例创建了一个 VRF 实例。
5
VRF 附加到的节点接口。
6
VRF 的路由表 ID 的名称。

24.1.6. 捕获附加到网桥的 NIC 的静态 IP

重要

捕获 NIC 的静态 IP 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

24.1.6.1. 示例:Linux 网桥接口节点网络配置策略,用于从附加到网桥的 NIC 中继承静态 IP 地址

在集群的节点上创建一个 Linux 网桥接口,并通过将单个 NodeNetworkConfigurationPolicy 清单应用到集群来将 NIC 的静态 IP 配置传输到桥接。

以下 YAML 文件是 Linux 网桥界面的清单示例。它包含了示例值,需要使用自己的信息替换。

apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
  name: br1-eth1-copy-ipv4-policy 1
spec:
  nodeSelector: 2
    node-role.kubernetes.io/worker: ""
  capture:
    eth1-nic: interfaces.name=="eth1" 3
    eth1-routes: routes.running.next-hop-interface=="eth1"
    br1-routes: capture.eth1-routes | routes.running.next-hop-interface := "br1"
  desiredState:
    interfaces:
      - name: br1
        description: Linux bridge with eth1 as a port
        type: linux-bridge 4
        state: up
        ipv4: "{{ capture.eth1-nic.interfaces.0.ipv4 }}" 5
        bridge:
          options:
            stp:
              enabled: false
          port:
            - name: eth1 6
     routes:
        config: "{{ capture.br1-routes.routes.running }}"
1
策略的名称。
2
可选: 如果没有包括 nodeSelector 参数,策略会应用到集群中的所有节点。本例使用 node-role.kubernetes.io/worker:"" 节点选择器来选择集群中的所有 worker 节点。
3
对网桥附加的节点 NIC 的引用。
4
接口的类型。这个示例会创建一个桥接。
5
网桥接口的 IP 地址。这个值与 spec.capture.eth1-nic 条目引用的 NIC 的 IP 地址匹配。
6
网桥附加到的节点 NIC。

24.1.7. 示例:IP 管理

以下配置片段示例演示了不同的 IP 管理方法。

这些示例使用 ethernet 接口类型来简化示例,同时显示 Policy 配置中相关的上下文。这些 IP 管理示例可与其他接口类型一起使用。

24.1.7.1. Static

以下片段在以太网接口中静态配置 IP 地址:

# ...
    interfaces:
    - name: eth1
      description: static IP on eth1
      type: ethernet
      state: up
      ipv4:
        dhcp: false
        address:
        - ip: 192.168.122.250 1
          prefix-length: 24
        enabled: true
# ...
1
使用接口的静态 IP 地址替换这个值。

24.1.7.2. 没有 IP 地址

以下片段确保接口没有 IP 地址:

# ...
    interfaces:
    - name: eth1
      description: No IP on eth1
      type: ethernet
      state: up
      ipv4:
        enabled: false
# ...

24.1.7.3. 动态主机配置

以下片段配置了一个以太网接口,它使用动态 IP 地址、网关地址和 DNS:

# ...
    interfaces:
    - name: eth1
      description: DHCP on eth1
      type: ethernet
      state: up
      ipv4:
        dhcp: true
        enabled: true
# ...

以下片段配置了一个以太网接口,它使用动态 IP 地址,但不使用动态网关地址或 DNS:

# ...
    interfaces:
    - name: eth1
      description: DHCP without gateway or DNS on eth1
      type: ethernet
      state: up
      ipv4:
        dhcp: true
        auto-gateway: false
        auto-dns: false
        enabled: true
# ...

24.1.7.4. DNS

默认情况下,nmstate API 会在全局范围内存储 DNS 值,而不是将其存储在网络接口中。在某些情况下,您必须配置网络接口来存储 DNS 值。

提示

设置一个 DNS 配置与修改 /etc/resolv.conf 文件相当。

要为网络接口定义 DNS 配置,您必须首先在网络接口 YAML 配置文件中指定 dns-resolver 部分。

重要

在配置 DNS 解析器时,您无法使用 br-ex 网桥(一个 OVNKubernetes 管理的 Open vSwitch 网桥)作为接口,除非您手动配置了自定义的 br-ex 网桥。

如需更多信息,请参阅在裸机中部署安装程序置备的集群文档或在裸机中安装用户置备的集群 文档中的"创建包括自定义 br-ex 网桥的清单对象"。

以下示例显示了全局存储 DNS 值的默认情况:

  • 配置没有网络接口的静态 DNS。请注意,当更新主机节点上的 /etc/resolv.conf 文件时,您不需要在 NodeNetworkConfigurationPolicy (NNCP)清单中指定一个接口 (IPv4 或 IPv6)。

    全局存储 DNS 值的网络接口的 DNS 配置示例

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
     name: worker-0-dns-testing
    spec:
      nodeSelector:
        kubernetes.io/hostname: <target_node>
      desiredState:
        dns-resolver:
          config:
            search:
            - example.com
            - example.org
            server:
            - 2001:db8:f::1
            - 192.0.2.251
    # ...

以下示例显示,配置一个网络接口来存储 DNS 值:

  • 如果要将静态 DNS 名称服务器排名在动态 DNS 名称服务器上,请在网络接口 YAML 配置文件中定义运行动态主机配置协议(DHCP)或 IPv6 自动配置(autoconf)机制的接口。

    192.0.2.1 添加到从 DHCPv4 网络协议检索的 DNS 名称服务器中的示例

    # ...
    dns-resolver:
      config:
        server:
        - 192.0.2.1
    interfaces:
      - name: eth1
        type: ethernet
        state: up
        ipv4:
          enabled: true
          dhcp: true
          auto-dns: true
    # ...

  • 如果您需要配置网络接口来存储 DNS 值,而不是使用默认方法(使用 nmstate API 在全局范围内存储 DNS 值),您可以在网络接口 YAML 文件中设置静态 DNS 值和静态 IP 地址。

    重要

    在网络接口级别上存储 DNS 值可能会导致名称解析问题,如 Open vSwitch (OVS) 网桥、Linux 网桥或绑定。

    在接口级别存储 DNS 值的配置示例

    # ...
    dns-resolver:
      config:
        search:
        - example.com
        - example.org
        server:
        - 2001:db8:1::d1
        - 2001:db8:1::d2
        - 192.0.2.1
    interfaces:
      - name: eth1
        type: ethernet
        state: up
        ipv4:
          address:
          - ip: 192.0.2.251
            prefix-length: 24
          dhcp: false
          enabled: true
        ipv6:
          address:
          - ip: 2001:db8:1::1
            prefix-length: 64
          dhcp: false
          enabled: true
          autoconf: false
    # ...

  • 如果要为您的网络接口设置静态 DNS 搜索域和动态 DNS 名称服务器,请在网络接口 YAML 配置文件中定义运行动态主机配置协议(DHCP)或 IPv6 自动配置(autoconf)机制的动态接口。

    设置 example.comexample.org 静态 DNS 搜索域以及动态 DNS 名称服务器设置的示例配置

    # ...
    dns-resolver:
      config:
        search:
        - example.com
        - example.org
        server: []
    interfaces:
      - name: eth1
        type: ethernet
        state: up
        ipv4:
          enabled: true
          dhcp: true
          auto-dns: true
        ipv6:
          enabled: true
          dhcp: true
          autoconf: true
          auto-dns: true
    # ...

24.1.7.5. 静态路由

以下片段在接口 eth1 中配置静态路由和静态 IP。

dns-resolver:
  config:
# ...
interfaces:
  - name: eth1
    description: Static routing on eth1
    type: ethernet
    state: up
    ipv4:
      dhcp: false
      enabled: true
      address:
      - ip: 192.0.2.251 1
        prefix-length: 24
routes:
  config:
  - destination: 198.51.100.0/24
    metric: 150
    next-hop-address: 192.0.2.1 2
    next-hop-interface: eth1
    table-id: 254
# ...
1
以太网接口的静态 IP 地址。
2
节点流量的下一跳地址。这必须与为以太接口设定的 IP 地址位于同一个子网中。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.