kubernetes - 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 的响应
解决方案
这个问题似乎与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 月 希望这能有所帮助。
推荐阅读
- vb.net - 将多个订单的项目添加到单个帐单中(水晶报表)
- kubernetes - 垂直和水平 Pod 自动缩放
- c++ - 如何将参数包扩展为向量
- graphql - Graphql 解析器不等待响应生成
- javascript - 有没有更好、更简洁的方法来编写这个 Yup 模式验证器(由 React Formik 组件使用)?
- javascript - 内联 svg 在 safari 中显示黑色,但在 chrome 上完美运行
- python - 如何绕过错误以继续在 Python 中进行的调用?
- c++ - 如何在有点旧的 g++ 中使用 pragma 启用 -ffast-math?
- cloud-init - 在 AWS 中,user_data 是在 cloud-init 之前执行的吗?
- asp.net - IIS 中的请求筛选功能出现未知错误