28.3. 对节点网络配置进行故障排除


如果节点网络配置遇到问题,则策略会自动回滚,且报告失败。这包括如下问题:

  • 配置没有在主机上应用。
  • 主机丢失了到默认网关的连接。
  • 断开了与 API 服务器的连接。

28.3.1. 对不正确的节点网络配置策略配置进行故障排除

您可以通过应用节点网络配置策略,对整个集群中的节点网络配置应用更改。

如果应用了不正确的配置,您可以使用以下示例进行故障排除并修正失败的节点网络策略。这个示例尝试将 Linux 网桥策略应用到具有三个 control plane 节点和三个计算节点的集群。策略不会被应用,因为策略会引用错误的接口。

要查找错误,您需要调查可用的 NMState 资源。然后您可以使用正确配置来更新策略。

先决条件

  • 您确保 Linux 系统上不存在 ens01 接口。

流程

  1. 在集群中创建策略。以下示例创建了一个简单的网桥 br1,它具有 ens01 作为其成员:

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
      name: ens01-bridge-testfail
    spec:
      desiredState:
        interfaces:
          - name: br1
            description: Linux bridge with the wrong port
            type: linux-bridge
            state: up
            ipv4:
              dhcp: true
              enabled: true
            bridge:
              options:
                stp:
                  enabled: false
              port:
                - name: ens01
    # ...
  2. 将策略应用到您的网络接口:

    $ oc apply -f ens01-bridge-testfail.yaml

    输出示例

    nodenetworkconfigurationpolicy.nmstate.io/ens01-bridge-testfail created

  3. 运行以下命令,验证策略的状态:

    $ oc get nncp

    输出显示策略失败:

    输出示例

    NAME                    STATUS
    ens01-bridge-testfail   FailedToConfigure

    仅有策略状态并不表示它在所有节点或某个节点子集中是否失败。

  4. 列出节点网络配置以查看策略在任意节点上是否成功。如果策略只在一组节点中失败,输出表示问题在于特定的节点配置。如果策略在所有节点上都失败,输出会认为问题在于策略。

    $ oc get nnce

    输出显示策略在所有节点上都失败:

    输出示例

    NAME                                         STATUS
    control-plane-1.ens01-bridge-testfail        FailedToConfigure
    control-plane-2.ens01-bridge-testfail        FailedToConfigure
    control-plane-3.ens01-bridge-testfail        FailedToConfigure
    compute-1.ens01-bridge-testfail              FailedToConfigure
    compute-2.ens01-bridge-testfail              FailedToConfigure
    compute-3.ens01-bridge-testfail              FailedToConfigure

  5. 查看失败的原因之一。以下命令使用输出工具 jsonpath 来过滤输出结果:

    $ oc get nnce compute-1.ens01-bridge-testfail -o jsonpath='{.status.conditions[?(@.type=="Failing")].message}'

    输出示例

    [2024-10-10T08:40:46Z INFO  nmstatectl] Nmstate version: 2.2.37
    NmstateError: InvalidArgument: Controller interface br1 is holding unknown port ens01

    上例显示 InvalidArgument 错误的输出,这表示 ens01 是一个未知端口。在本例中,您可能需要更改策略配置文件中的端口配置。

  6. 要确保正确配置了策略,请求 NodeNetworkState 来查看一个或多个节点的网络配置。以下命令返回 control-plane-1 节点的网络配置:

    $ oc get nns control-plane-1 -o yaml

    输出显示节点上的接口名称为 ens1,但失败的策略使用了 ens01:

    输出示例

       - ipv4:
    # ...
          name: ens1
          state: up
          type: ethernet

  7. 通过编辑现有策略修正错误:

    $ oc edit nncp ens01-bridge-testfail
    # ...
              port:
                - name: ens1

    保存策略以应用更正。

  8. 检查策略的状态,以确保它被成功更新:

    $ oc get nncp

    输出示例

    NAME                    STATUS
    ens01-bridge-testfail   SuccessfullyConfigured

    在集群中的所有节点上都成功配置了更新的策略。

28.3.2. 在断开连接的环境中的 DNS 连接问题故障排除

如果您在断开连接的环境中配置 nmstate 时遇到 DNS 连接问题,您可以配置 DNS 服务器来解析域 root-servers.net 的名称服务器列表。

重要

确保 DNS 服务器包含 root-servers.net 区域的名称服务器(NS)条目。DNS 服务器不需要将查询转发到上游解析器,但服务器必须为 NS 查询返回正确的回答。

28.3.2.1. 配置名为 server 的 bind9 DNS

对于配置为查询 bind9 DNS 服务器的集群,您可以将 root-servers.net 区域添加到至少一个 NS 记录的配置文件。例如,您可以使用 /var/named/named.localhost 作为已匹配此条件的区域文件。

流程

  1. 运行以下命令,在 /etc/named.conf 配置文件末尾添加 root-servers.net 区域:

    $ cat >> /etc/named.conf <<EOF
    zone "root-servers.net" IN {
        	type master;
        	file "named.localhost";
    };
    EOF
  2. 运行以下命令重启 named 服务:

    $ systemctl restart named
  3. 运行以下命令确认 root-servers.net 区已存在:

    $ journalctl -u named|grep root-servers.net

    输出示例

    Jul 03 15:16:26 rhel-8-10 bash[xxxx]: zone root-servers.net/IN: loaded serial 0
    Jul 03 15:16:26 rhel-8-10 named[xxxx]: zone root-servers.net/IN: loaded serial 0

  4. 运行以下命令,验证 DNS 服务器是否可以解析 root-servers.net 域的 NS 记录:

    $ host -t NS root-servers.net. 127.0.0.1

    输出示例

    Using domain server:
    Name: 127.0.0.1
    Address: 127.0.0.53
    Aliases:
    root-servers.net name server root-servers.net.

28.3.2.2. 配置 dnsmasq DNS 服务器

如果您使用 dnsmasq 作为 DNS 服务器,您可以将 root-servers.net 域的解析委派给另一个 DNS 服务器,例如,使用您指定的 DNS 服务器创建新配置文件来解析 root-servers.net

  1. 运行以下命令,创建一个将域 root-servers.net 委派给另一个 DNS 服务器的配置文件:

    $ echo 'server=/root-servers.net/<DNS_server_IP>'> /etc/dnsmasq.d/delegate-root-servers.net.conf
  2. 运行以下命令重启 dnsmasq 服务:

    $ systemctl restart dnsmasq
  3. 运行以下命令确认 root-servers.net 域已被委派给另一个 DNS 服务器:

    $ journalctl -u dnsmasq|grep root-servers.net

    输出示例

    Jul 03 15:31:25 rhel-8-10 dnsmasq[1342]: using nameserver 192.168.1.1#53 for domain root-servers.net

  4. 运行以下命令,验证 DNS 服务器是否可以解析 root-servers.net 域的 NS 记录:

    $ host -t NS root-servers.net. 127.0.0.1

    输出示例

    Using domain server:
    Name: 127.0.0.1
    Address: 127.0.0.1#53
    Aliases:
    root-servers.net name server root-servers.net.

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.