错误: RFC2136 将仅有一个名字服务器不可达时,报告多个名字服务器为失败
发生了什么情况? 当使用多个 RFC2136 名称服务器配置 ExternalDNS 时,我看到的警告日志不正确或误导性。 在我的设置中,配置了两个名称服务器: 192.168.101.200 192.168.101.201 当一个名称服务器不可用时,ExternalDNS 会报告 **两个名称服务器均已失败**,尽管实际的 AXFR 连接失败仅发生在 `192.168.101.200` 上。 例如,日志显示: time="2026-09-10T04:36:49Z" level=info msg="Configured RFC2136 with zones '[mbl.int.internal]' and nameservers '[192.168.101.200 192.168.101.201]' time="2026-09-09T06:14:53Z" level=warning msg="Last operation failed for nameserver 192.168.101.200:53" time="2026-09-09T06:14:55Z" level=warning msg="Last operation failed for nameserver 192.168.101.201:53" time="2026-09-09T06:14:55Z" level=warning msg="Last operation error message: failed to fetch records via AXFR: failed to connect for transfer: dial tcp 192.168.101.200:53: i/o timeout" time="2026-09-09T06:14:55Z" level=error msg="Failed to do run once: soft error failed to fetch records via AXFR: failed to connect for transfer: dial tcp 192.168.101.200:53: i/o timeout (consecutive soft errors: 83)" 重要的一点是,实际错误是: dial tcp 192.168.101.200:53: i/o timeout 然而,ExternalDNS 还报告: Last operation failed for nameserver 192.168.101.201:53 这给人一种**两个名称服务器都不可用**的印象,这是误导性的。 预期行为 当操作对特定名称服务器失败时,警告应仅指定**实际失败的名称服务器**。 例如: WARNING: AXFR failed for nameserver 192.168.101.200:53: failed to connect for transfer: dial tcp 192.168.101.200:53: i/o timeout 如果 ExternalDNS 使用 `192.168.101.201` 重试该操作,并且成功,则日志应指示第二个名称服务器已成功使用。 例如: INFO: AXFR succeeded using nameserver 192.168.101.201:53 因此,日志应区分以下情况: 192.168.101.200 -> FAILED 192.168.101.201 -> SUCCESS 而不是报告两者均失败。 如何重现 1. 使用 RFC2136 提供程序和两个名称服务器配置 ExternalDNS: --rfc2136-host=192.168.101.200,192.168.101.201 2. 使用以下命令启用 AXFR: --rfc2136-axfr 3. 仅使一个名称服务器不可用。 例如,使 192.168.101.200:53 不可用,同时保持 192.168.101.201:53 可用。 4. 触发 ExternalDNS 重新调整。 5. 观察警告日志。 实际行为 ExternalDNS 记录了两个名称服务器的失败: Last operation failed for nameserver 192.168.101.200:53 Last operation failed for nameserver 192.168.101.201:53 而实际的底层错误仅指定: 192.168.101.200:53 作为失败的端点。 预期行为 …
内容来源: kubernetes-sigs/external-dns