×

使用 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 上次成功更新的时间戳。只要节点可访问,就会定期更新此时间戳,并可用于评估报告的新鲜程度。

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

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

步骤
  1. 导航到 **网络** → **NodeNetworkState**。

    在 **NodeNetworkState** 页面中,您可以查看 `NodeNetworkState` 资源列表以及在节点上创建的相应接口。您可以根据 **接口状态**、**接口类型** 和 **IP** 使用 **过滤器**,或者根据 **名称** 或 **标签** 标准使用搜索栏来缩小显示的 `NodeNetworkState` 资源范围。

  2. 要访问有关 `NodeNetworkState` 资源的详细信息,请单击 **名称** 列中列出的 `NodeNetworkState` 资源名称。

  3. 要展开并查看 `NodeNetworkState` 资源的 **网络详细信息** 部分,请单击 **>** 图标。或者,您可以单击 **网络接口** 列下的每个接口类型以查看网络详细信息。

从 Web 控制台管理策略

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

监控策略状态

您可以从 **NodeNetworkConfigurationPolicy** 页面监控策略状态。此页面以表格格式显示在集群中创建的所有策略,并包含以下列:

名称

创建的策略的名称。

匹配的节点

应用策略的节点数量。这可能是基于节点选择器的节点子集,也可能是集群上的所有节点。

节点网络状态

匹配节点的执行状态。您可以单击执行状态并查看有关状态的详细信息。

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

创建策略

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

步骤
  1. 导航到 **网络** → **NodeNetworkConfigurationPolicy**。

  2. 在 **NodeNetworkConfigurationPolicy** 页面中,单击 **创建**,然后选择 **从表单** 选项。

    如果没有现有策略,您也可以单击 **创建 NodeNetworkConfigurationPolicy** 以使用表单创建策略。

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

  3. 可选:选中 **仅使用节点选择器将此 NodeNetworkConfigurationPolicy 应用于特定节点子集** 复选框以指定必须应用策略的节点。

  4. 在 **策略名称** 字段中输入策略名称。

  5. 可选:在 **描述** 字段中输入策略的描述。

  6. 可选:在 **策略接口(s)** 部分,默认情况下会添加桥接接口,其中包含可编辑字段中的预设值。通过执行以下步骤来编辑值:

    1. 在**接口名称**字段中输入接口名称。

    2. 从**网络状态**下拉菜单中选择网络状态。默认选择值为**Up**。

    3. 从**类型**下拉菜单中选择接口类型。可用值为**桥接**、**绑定**和**以太网**。默认选择值为**桥接**。

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

    4. 可选:在 IP 配置部分,选中**IPv4**复选框为接口分配 IPv4 地址,并配置 IP 地址分配详细信息。

      1. 点击**IP 地址**使用静态 IP 地址配置接口,或点击**DHCP**自动分配 IP 地址。

      2. 如果您选择了**IP 地址**选项,请在**IPv4 地址**字段中输入 IPv4 地址,并在**前缀长度**字段中输入前缀长度。

        如果您选择了**DHCP**选项,请取消选中要禁用的选项。可用选项包括**自动 DNS**、**自动路由**和**自动网关**。所有选项默认都已选中。

    5. 可选:在**端口**字段中输入端口号。

    6. 可选:选中**启用 STP**复选框以启用 STP。

    7. 可选:要向策略添加接口,请点击**向策略添加另一个接口**。

    8. 可选:要从策略中删除接口,请点击接口旁边的减号图标。

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

  7. 点击**创建**完成策略创建。

更新策略

使用表单更新策略

步骤
  1. 导航到 **网络** → **NodeNetworkConfigurationPolicy**。

  2. 在**NodeNetworkConfigurationPolicy**页面中,点击要编辑的策略旁边的更多选项图标,然后点击**编辑**。

  3. 编辑您想要更新的字段。

  4. 点击**保存**。

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

使用 YAML 更新策略

步骤
  1. 导航到 **网络** → **NodeNetworkConfigurationPolicy**。

  2. 在**NodeNetworkConfigurationPolicy**页面中,点击要编辑的策略的**名称**列下的策略名称。

  3. 点击**YAML**选项卡,然后编辑 YAML。

  4. 点击**保存**。

删除策略

步骤
  1. 导航到 **网络** → **NodeNetworkConfigurationPolicy**。

  2. 在**NodeNetworkConfigurationPolicy**页面中,点击要删除的策略旁边的更多选项图标,然后点击**删除**。

  3. 在弹出窗口中,输入策略名称以确认删除,然后点击**删除**。

使用 CLI 管理策略

在节点上创建接口

通过将NodeNetworkConfigurationPolicy清单应用于集群,在集群中的节点上创建接口。清单详细说明了接口所需的配置。

默认情况下,清单应用于集群中的所有节点。要将接口添加到特定节点,请添加spec: nodeSelector参数以及节点选择器的相应<key>:<value>

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

步骤
  1. 创建NodeNetworkConfigurationPolicy清单。以下示例在所有工作节点上配置 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: ""节点选择器来选择集群中的所有工作节点。
    4 可选:指定策略配置可以同时应用于的最大启用 nmstate 节点数。此参数可以设置为百分比值(字符串),例如"10%",也可以设置为绝对值(数字),例如3
    5 可选:接口的易于理解的描述。
    6 可选:指定 DNS 服务器的搜索和服务器设置。
  2. 创建节点网络策略

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

其他资源

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

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

应用节点网络策略时,将为集群中的每个节点创建一个NodeNetworkConfigurationEnactment对象。节点网络配置执行是一个只读对象,表示策略在该节点上的执行状态。如果策略未能应用于节点,则该节点的执行将包含用于故障排除的回溯信息。

步骤
  1. 要确认策略已应用于集群,请列出策略及其状态。

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

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

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

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

从节点中删除接口

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

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

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

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

步骤
  1. 更新用于创建接口的NodeNetworkConfigurationPolicy清单。以下示例删除了一个Linux桥接并使用DHCP配置eth1网卡,以避免连接中断。

    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: ""节点选择器来选择集群中的所有工作节点。
    4 将状态更改为absent将删除接口。
    5 要从桥接接口分离的接口名称。
    6 接口类型。此示例创建一个以太网接口。
    7 接口的请求状态。
    8 可选:如果不使用dhcp,您可以设置静态IP或将接口保留为无IP地址。
    9 在此示例中启用ipv4
  2. 更新节点上的策略并删除接口。

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

不同接口的示例策略配置

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

  • 当您需要将策略应用于多个节点时,请为每个目标节点创建一个NodeNetworkConfigurationPolicy清单。Kubernetes NMState Operator会以未指定的顺序将策略应用于每个具有NNCP的节点。使用这种方法对策略进行范围限定可以缩短策略应用时间,但如果集群配置中存在错误,则会增加集群范围中断的风险。为避免此类错误,请先将NNCP应用于某些节点,并在确认它们已正确配置后,再继续将策略应用于其余节点。

  • 当您需要将策略应用于许多节点,但只想为所有目标节点创建一个NNCP时,Kubernetes NMState Operator会按顺序将策略应用于每个节点。您可以使用集群配置中的maxUnavailable参数设置目标节点的策略应用速度和覆盖范围。通过为参数设置较低的百分比值,可以降低集群范围中断的风险,即使中断影响到正在接收策略应用的小百分比的节点。

  • 考虑在一个策略中指定所有相关的网络配置。

  • 当节点重启时,Kubernetes NMState Operator无法控制它将策略应用于节点的顺序。Kubernetes NMState Operator可能会按顺序应用相互依赖的策略,从而导致网络对象性能下降。

示例:Linux桥接接口节点网络配置策略

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

以下YAML文件是Linux桥接接口清单的示例。它包含您必须替换为您自己信息的示例值。

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 桥接连接到的节点网卡。

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

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

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

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

以下YAML文件是VLAN接口清单的示例。它包含您必须替换为您自己信息的示例值。

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的节点网卡。
9 VLAN标签。

示例:虚拟功能的节点网络配置策略

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

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

  • 配置VF的QoS主机网络设置以优化性能。

  • 添加、删除或更新网络接口的VF。

  • 管理VF绑定配置。

要使用NMState更新通过SR-IOV网络运营商也管理的物理功能上的SR-IOV VF的主机网络设置,必须在相关的SriovNetworkNodePolicy资源中将externallyManaged参数设置为true。有关更多信息,请参阅“其他资源”部分。

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

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的清单示例。

在此示例配置中,ens1f1v0 VF在ens1f1物理接口上创建,此VF添加到绑定网络接口bond0。该绑定使用active-backup模式来实现冗余。在此示例中,VF配置为使用硬件卸载直接在物理接口上管理VLAN。

apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
  name: addvf (1)
spec:
  nodeSelector: (2)
    node-role.kubernetes.io/worker: "" (3)
  maxUnavailable: 3
  desiredState:
    interfaces:
      - name: ens1f1 (4)
        type: ethernet
        state: up
        ethernet:
            sr-iov:
              total-vfs: 1 (5)
              vfs:
                - id: 0
                  trust: true (6)
                  vlan-id: 477 (7)
      - name: bond0 (8)
        description: Attach VFs to bond (9)
        type: bond (10)
        state: up (11)
        link-aggregation:
          mode: active-backup (12)
          options:
            primary: ens1f0v0 (13)
          port: (14)
            - ens1f0v0
            - ens1f1v0 (15)
1 策略名称。
2 可选:如果您不包含nodeSelector参数,则策略将应用于集群中的所有节点。
3 此示例适用于所有具有worker角色的节点。
4 VF网络接口的名称。
5 要创建的VF数量。
6 设置为允许活动和备份VF之间的故障转移绑定。
7 VLAN的ID。此示例使用硬件卸载直接在VF上定义VLAN。
8 绑定网络接口的名称。
9 可选:接口的易于理解的描述。
10 接口类型。
11 配置后接口的请求状态。
12 绑定的绑定策略。
13 主要连接的绑定端口。
14 绑定网络接口的端口。
15 在此示例中,VLAN网络接口作为附加接口添加到绑定网络接口。

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

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

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

  • mode=1 active-backup

  • mode=2 balance-xor

  • mode=4 802.3ad

不支持其他绑定模式。

以下YAML文件是绑定接口清单的示例。它包含您必须替换为您自己信息的示例值。

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 绑定的驱动程序模式。此示例使用活动备份模式。
11 可选:此示例使用miimon每140毫秒检查一次绑定链接。
12 绑定中的下属节点网卡。
13 可选:链路的最大传输单元 (MTU)。如果未指定,则默认设置为1500

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

通过将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

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

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

以下 YAML 文件示例创建了一个名为bond10的绑定,该绑定跨越两个网卡,以及名为bond10.103的VLAN,该VLAN连接到该绑定。

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 (4)
      description: vlan using bond10 (5)
      type: vlan (6)
      state: up (7)
      vlan:
         base-iface: bond10 (11)
         id: 103 (12)
      ipv4:
        dhcp: true (13)
        enabled: true (14)
1 策略名称。
2 可选:如果您不包含nodeSelector参数,则策略将应用于集群中的所有节点。
3 此示例使用hostname节点选择器。
4 接口名称。
5 可选:接口的易于理解的描述。
6 接口类型。
7 创建后接口的请求状态。
8 绑定的驱动程序模式。
9 可选:此示例使用miimon每140毫秒检查一次绑定链接。
10 绑定中的下属节点网卡。
11 连接VLAN的节点网卡。
12 VLAN标签。
13 可选:如果您不使用 dhcp,您可以设置静态 IP 或将接口保留为无 IP 地址。
14 在此示例中启用 ipv4。

示例:具有 VRF 实例节点网络配置策略的网络接口

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

将 VRF 实例与网络接口关联仅是技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,从而使客户能够在开发过程中测试功能并提供反馈。

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

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

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

以下 YAML 文件是将 VRF 实例与网络接口关联的示例。它包含您必须替换为您自己的信息的示例值。

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 的名称。

捕获连接到桥接器的网卡的静态 IP

捕获网卡的静态 IP 仅是技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,从而使客户能够在开发过程中测试功能并提供反馈。

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

示例:Linux 桥接接口节点网络配置策略,用于从连接到桥接器的网卡继承静态 IP 地址

在集群中的节点上创建 Linux 桥接接口,并将网卡的静态 IP 配置转移到桥接器,方法是将单个NodeNetworkConfigurationPolicy清单应用于集群。

以下 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: ""节点选择器来选择集群中的所有工作节点。
3 桥接器连接到的节点网卡的引用。
4 接口类型。此示例创建一个桥接。
5 桥接接口的 IP 地址。此值与spec.capture.eth1-nic条目引用的网卡的 IP 地址匹配。
6 桥接连接到的节点网卡。

示例:IP 管理

以下示例配置代码段显示了不同的 IP 管理方法。

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

静态

以下代码段静态配置以太网接口上的 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 地址。

无 IP 地址

以下代码段确保接口没有 IP 地址

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

动态主机配置

以下代码段配置使用动态 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
# ...

DNS

默认情况下,nmstate API 全局存储 DNS 值,而不是将它们存储在网络接口中。在某些情况下,必须配置网络接口才能存储 DNS 值。

设置 DNS 配置类似于修改/etc/resolv.conf文件。

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

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

有关更多信息,请参阅在裸机上部署安装程序配置的集群文档或在裸机上安装用户配置的集群文档中的“创建包含自定义 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
    # ...

静态路由

以下代码片段配置了接口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 地址位于同一子网中。