12.2. 更新节点网络配置
您可以通过将 NodeNetworkConfigurationPolicy
清单应用到集群来更新节点网络的配置,如为节点添加或删除接口。
12.2.1. 关于 nmstate
OpenShift Virtualization 使用 nmstate
来报告并配置节点网络的状态。这样就可以通过将单个配置清单应用到集群来修改网络策略配置,例如在所有节点上创建 Linux 桥接。
节点网络由以下对象监控和更新:
NodeNetworkState
- 报告该节点上的网络状态。
NodeNetworkConfigurationPolicy
-
描述节点上请求的网络配置。您可以通过将
NodeNetworkConfigurationPolicy
清单应用到集群来更新节点网络配置,包括添加和删除网络接口 。 NodeNetworkConfigurationEnactment
- 报告每个节点上采用的网络策略。
OpenShift Virtualization 支持使用以下 nmstate 接口类型:
- Linux Bridge
- VLAN
- bond
- Ethernet
如果您的 OpenShift Container Platform 集群使用 OVN-Kubernetes 作为默认 Container Network Interface(CNI)供应商,则无法将 Linux 网桥或绑定附加到主机的默认接口,因为 OVN-Kubernetes 的主机网络拓扑发生了变化。作为临时解决方案,您可以使用连接到主机的二级网络接口,或切换到 OpenShift SDN 默认 CNI 供应商。
12.2.2. 在节点上创建接口
通过将一个 NodeNetworkConfigurationPolicy
清单应用到集群来在集群的节点上创建一个接口。清单详细列出了请求的接口配置。
默认情况下,清单会应用到集群中的所有节点。要将接口只添加到特定的节点,在节点选择器上添加 spec: nodeSelector
参数和适当的 <key>:<value>
。
您可以同时配置多个支持 nmstate 节点。该配置适用于并行节点的 50%。如果网络连接失败,此策略可防止整个集群不可用。要将策略配置并行应用到集群的特定部分,请使用 maxUnavailable
字段。
流程
创建
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
创建节点网络策略:
$ oc apply -f br1-eth1-policy.yaml 1
- 1
- 节点网络配置策略清单的文件名。
其他资源
12.2.3. 确认节点上的节点网络策略更新
NodeNetworkConfigurationPolicy
清单描述了您为集群中的节点请求的网络配置。节点网络策略包括您请求的网络配置以及整个集群中的策略执行状态。
当您应用节点网络策略时,会为集群中的每个节点创建一个 NodeNetworkConfigurationEnactment
对象。节点网络配置是一个只读对象,代表在该节点上执行策略的状态。如果策略在节点上应用失败,则该节点会包括 traceback 用于故障排除。
流程
要确认策略已应用到集群,请列出策略及其状态:
$ oc get nncp
可选:如果策略配置成功的时间比预期的要长,您可以检查特定策略请求的状态和状态条件:
$ oc get nncp <policy> -o yaml
可选:如果策略在所有节点上配置成功的时间比预期的要长,您可以列出集群中的 Enactments 的状态:
$ oc get nnce
可选:要查看特定的 Enactment 的配置,包括对失败配置进行任何错误报告:
$ oc get nnce <node>.<policy> -o yaml
12.2.4. 从节点中删除接口
您可以通过编辑 NodeNetworkConfigurationPolicy
对象从集群中的一个或多个节点中删除接口,并将接口的状态
设置为 absent
。
从节点中删除接口不会自动将节点网络配置恢复到以前的状态。如果要恢复之前的状态,则需要在策略中定义节点网络配置。
如果删除了网桥或绑定接口,以前附加到该网桥或绑定接口的任何节点 NIC 都会处于 down
状态并变得不可访问。为了避免连接丢失,在相同策略中配置节点 NIC,使其具有 up
状态,以及使用 DHCP 或一个静态 IP 地址。
删除添加接口的节点网络策略不会更改节点上的策略配置。虽然 NodeNetworkConfigurationPolicy
是集群中的一个对象,但它只代表请求的配置。
同样,删除接口不会删除策略。
流程
更新用来创建接口的
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
更新节点上的策略并删除接口:
$ oc apply -f <br1-eth1-policy.yaml> 1
- 1
- 策略清单的文件名。
12.2.5. 不同接口的策略配置示例
12.2.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
12.2.5.2. 示例:VLAN 接口节点网络配置策略
通过将一个 NodeNetworkConfigurationPolicy
清单应用到集群来在集群的节点上创建一个 VLAN 接口。
以下 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
12.2.5.3. 示例:绑定接口节点网络配置策略
通过将一个 NodeNetworkConfigurationPolicy
清单应用到集群来在集群的节点上创建一个绑定接口。
OpenShift Virtualization 只支持以下绑定模式:
-
mode=1 active-backup
-
mode=2 balance-xor
-
mode=4 802.3ad
-
mode=5 balance-tlb
- mode=6 balance-alb
以下 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
。
12.2.5.4. 示例:以太网接口节点网络配置策略
通过将 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
12.2.5.5. 示例:同一节点网络配置策略中的多个接口
您可以在相同的节点网络配置策略中创建多个接口。这些接口可以相互引用,允许您使用单个策略清单来构建和部署网络配置。
以下示例片断在两个 NIC 间创建一个名为 bond10
的绑定和一个名为 br1
连接到绑定的 Linux 网桥。
#... interfaces: - name: bond10 description: Bonding eth2 and eth3 for Linux bridge type: bond state: up link-aggregation: port: - eth2 - eth3 - name: br1 description: Linux bridge on bond type: linux-bridge state: up bridge: port: - name: bond10 #...
12.2.6. 捕获附加到网桥的 NIC 的静态 IP
捕获 NIC 的静态 IP 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
12.2.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 }}"
其他资源
12.2.7. 示例:IP 管理
以下配置片段示例演示了不同的 IP 管理方法。
这些示例使用 ethernet
接口类型来简化示例,同时显示 Policy 配置中相关的上下文。这些 IP 管理示例可与其他接口类型一起使用。
12.2.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 地址替换这个值。
12.2.7.2. 没有 IP 地址
以下片段确保接口没有 IP 地址:
... interfaces: - name: eth1 description: No IP on eth1 type: ethernet state: up ipv4: enabled: false ...
12.2.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 ...
12.2.7.4. DNS
将 DNS 配置设置为修改 /etc/resolv.conf
文件。以下片段在主机上设置 DNS 配置。
...
interfaces: 1
...
ipv4:
...
auto-dns: false
...
dns-resolver:
config:
search:
- example.com
- example.org
server:
- 8.8.8.8
...
- 1
- 您必须配置带有
auto-dns: false
的接口,或者您必须在接口上使用静态 IP 配置,以便 Kubernetes NMState 存储自定义 DNS 设置。
在配置 DNS 解析器时,您无法使用 br-ex
(一个 由 OVNKubernetes 管理的 Open vSwitch 网桥)作为接口。
12.2.7.5. 静态路由
以下片段在接口 eth1
中配置静态路由和静态 IP。
... interfaces: - name: eth1 description: Static routing on eth1 type: ethernet state: up ipv4: dhcp: false address: - ip: 192.0.2.251 1 prefix-length: 24 enabled: true 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 ...