Ubuntu 14.04 客户端解析k8s服务名失败

Ubuntu 14.04 client failed to resolve k8s service name

我有一个 K8S 1.14 集群设置,CoreDNS 1.5.0 作为默认 DNS 服务器。当我收到 TTL 小于 SOA 字段中的最小 TTL 值的响应时,我的 ubuntu 14.04 客户端无法解析服务名称(使用 IPv6 结果响应,未解析 IPv6 地址)。

我尝试在Ubuntu 18.04 中使用相同的客户端代码,每次都可以解析服务名称。我正在使用 python socket.getaddrinfo 来解析服务名称,使用 socket.gethostbyname 可以解决这个问题,因为它只查询 A 记录。

这是我用来测试的代码

import socket
import time

while True:
    try:
        time.sleep(2)
        print socket.getaddrinfo("kubernetes", "443")
    except Exception as e:
        print e

运行这段代码的结果如下:

[(2, 1, 6, '', ('10.233.0.1', 443)), (2, 2, 17, '', ('10.233.0.1', 443)), (2 , 3, 0, '', ('10.233.0.1', 443))]

[Errno -5] 没有与主机名关联的地址

[Errno -5] 没有与主机名关联的地址

[(2, 1, 6, '', ('10.233.0.1', 443)), (2, 2, 17, '', ('10.233.0.1', 443)), (2 , 3, 0, '', ('10.233.0.1', 443))]

[Errno -5] 没有与主机名关联的地址

[Errno -5] 没有与主机名关联的地址

当我将默认的 ttl 更新为 30 秒时,我遇到了更多的失败,但我得到了 TTL 30 的响应

这个问题似乎与 dns 缓存有关

在 ubuntu 中启用 dns 缓存之前 14:04:

[(2, 1, 6, '', ('10.96.0.1', 443)), (2, 2, 17, '', ('10.96.0.1', 443)), (2, 3, 0, '', ('10.96.0.1', 443))]
[Errno -5] No address associated with hostname
[Errno -5] No address associated with hostname
[Errno -5] No address associated with hostname

安装 dns 缓存后 f.e。 nscd:

apt-get install nscd
service nscd start

[(2, 1, 6, '', ('10.96.0.1', 443)), (2, 2, 17, '', ('10.96.0.1', 443)), (2, 3, 0, '', ('10.96.0.1', 443))]
[(2, 1, 6, '', ('10.96.0.1', 443)), (2, 2, 17, '', ('10.96.0.1', 443)), (2, 3, 0, '', ('10.96.0.1', 443))]
[(2, 1, 6, '', ('10.96.0.1', 443)), (2, 2, 17, '', ('10.96.0.1', 443)), (2, 3, 0, '', ('10.96.0.1', 443))]
[(2, 1, 6, '', ('10.96.0.1', 443)), (2, 2, 17, '', ('10.96.0.1', 443)), (2, 3, 0, '', ('10.96.0.1', 443))]
[(2, 1, 6, '', ('10.96.0.1', 443)), (2, 2, 17, '', ('10.96.0.1', 443)), (2, 3, 0, '', ('10.96.0.1', 443))]

您可以在 /etc/nscd.conf

中验证您的 dns 缓存

如果我是正确的 - DNS 未缓存在 Ubuntu < 17.04

此外 - 根据 ubuntu 14.04.6 的官方发布时间表:标准支持将于 2019 年 4 月结束 希望对您有所帮助。

请升级你的coredns到最新版本,此问题已在v1.5.1中修复,这里是change log