1.13. 示例:IP 管理
以下配置片段示例演示了不同的 IP 管理方法。
这些示例使用 ethernet 接口类型来简化示例,同时显示 Policy 配置中相关的上下文。这些 IP 管理示例可与其他接口类型一起使用。
1.13.1. Static 复制链接链接已复制到粘贴板!
以下片段在以太网接口中静态配置 IP 地址:
# ...
interfaces:
- name: eth1
description: static IP on eth1
type: ethernet
state: up
ipv4:
dhcp: false
address:
- ip: 192.168.122.250
prefix-length: 24
enabled: true
# ...
- 1
- 使用接口的静态 IP 地址替换这个值。
1.13.2. 没有 IP 地址 复制链接链接已复制到粘贴板!
以下片段确保接口没有 IP 地址:
# ...
interfaces:
- name: eth1
description: No IP on eth1
type: ethernet
state: up
ipv4:
enabled: false
# ...
当您将 ipv4.enabled 和 ipv6.enabled 参数设置为 false 时,始终将 state 参数设置为 up,以禁用接口。如果使用此配置设置了 state: down,接口会因为自动 DHCP 分配而接收 DHCP IP 地址。
1.13.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
# ...
1.13.4. 介质访问控制(MAC)地址 复制链接链接已复制到粘贴板!
您可以使用 MAC 地址来识别网络接口,而不使用网络接口的名称。网络接口名称可能会因为各种原因而改变,如操作系统配置更改。但是,每个网络接口都有一个不更改的唯一 MAC 地址。这意味着,使用 MAC 地址是更永久地识别特定网络接口的方法。
identifier 参数支持的值包括默认 name 值和 mac-address 值。name 值将配置应用到包含指定接口名称的接口。
将 mac-address 值用于 identifier 参数表示 MAC 地址是网络接口的标识符。如果将 identifier 值设置为 mac-address,则必须在以下 mac-address 参数字段中输入特定的 MAC 地址。
您仍然可以为 name 参数指定一个值,但设置 identifier: mac-address 值表示 MAC 地址用作网络接口的主标识符。如果您指定了不正确的 MAC 地址,nmstate 会报告无效的参数错误。
以下片段将 MAC 地址指定为名为 eth1 的以太网设备的主标识符,其 MAC 地址为 8A:8C:92:1A:F6:98 :
# ...
interfaces:
- name: eth1
profile-name: wan0
type: ethernet
state: up
identifier: mac-address
mac-address: 8A:8C:92:1A:F6:98
# ...
1.13.5. DNS 复制链接链接已复制到粘贴板!
默认情况下,nmstate API 会在全局范围内存储 DNS 值,而不是将其存储在网络接口中。在某些情况下,您必须配置网络接口来存储 DNS 值。
设置一个 DNS 配置与修改 /etc/resolv.conf 文件相当。
要为网络接口定义 DNS 配置,您必须首先在网络接口 YAML 配置文件中指定 dns-resolver 部分。要将 NNCP 配置应用到您的网络接口,您需要运行 oc apply -f <nncp_file_name> 命令。
以下示例显示了全局存储 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: server: - 2001:db8:f::1 - 192.0.2.251 search: - example.com - example.org # ...重要您可以在 NNCP 文件的
dns-resolver.config部分下指定 DNS 选项,如下例所示:# ... desiredState: dns-resolver: config: options: - timeout:2 - attempts:3 # ...如果要从网络接口中删除 DNS 选项,请将以下配置应用到 NNCP,然后运行
oc apply -f <nncp_file_name>命令:# ... dns-resolver: config: {} interfaces: [] # ...
以下示例显示,配置一个网络接口来存储 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 值,而不是使用默认方法(使用
nmstateAPI 在全局范围内存储 DNS 值),您可以在网络接口 YAML 文件中设置静态 DNS 值和静态 IP 地址。重要在网络接口级别上存储 DNS 值可能会导致名称解析问题,如 Open vSwitch (OVS) 网桥、Linux 网桥或绑定。
在接口级别存储 DNS 值的配置示例:
# ... dns-resolver: config: server: - 2001:db8:1::d1 - 2001:db8:1::d2 - 192.0.2.1 search: - example.com - example.org 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)机制的静态接口。重要在网络接口 YAML 文件中指定以下
dns-resolver配置可能会导致重启出现竞争条件,以防止NodeNetworkConfigurationPolicy(NNCP)应用到集群中运行的 pod:- 为您的网络接口设置静态 DNS 搜索域和动态 DNS 名称服务器。
-
为
search参数指定域后缀,而不是为server参数设置 IP 地址。
设置
example.com和example.org静态 DNS 搜索域以及静态 DNS 名称服务器设置的示例配置:# ... dns-resolver: config: server: - 2001:db8:f::1 - 192.0.2.251 search: - example.com - example.org 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 # ...