首页 > 解决方案 > Ubuntu 14.04 客户端无法解析 k8s 服务名称

问题描述

我有一个 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 的响应

标签: kubernetescoredns

解决方案


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

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

[(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缓存安装fe 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 月 希望这能有所帮助。


推荐阅读