getaddrinfo:名称解析 kubernetes + coredns 暂时失败

ref*_*los 5 kubernetes coredns

我们有一项可以批量发送大量事件的服务。它基本上打开多个 http POST 连接。

自从我们将服务转移到 kubernetes 以来,我们getaddrinfo: Temporary failure in name resolution时不时就会出错。(大多数呼叫都有效,但有些失败,这很奇怪。

谁能解释为什么以及如何解决?

hig*_*ita 3

检查一下tinder帖子,他们也有类似的问题:

https://medium.com/tinder-engineering/tinders-move-to-kubernetes-cda2a6372f44

以及他们的 DNS 信息的来源:

https://www.weave.works/blog/racy-conntrack-and-dns-lookup-timeouts

TLDR:检查您的 arp 表缓存 gc_* 主机参数,尝试在容器 /etc/gai.conf 中禁用 AAAA 查询,将 DNS 移至守护进程集并将主机 IP 作为 dns 服务器注入到 pod

另外,为了帮助实现这一点并加快 dns 解析速度,请向所有域添加一个结束点(即:database.example.com。),这样 coredns 将直接尝试该查询(一个查询,2 个 ipv6),而不是尝试所有 kubernetes搜索域列表(大约 5 个、10 个带 ipv6 的域)。只在您查询 kubernetes 资源或不喜欢它的应用程序中省略那个点(如果它们存在,那就是一个错误,所有 DNS 总是以点结尾,而大多数时候我们可以省略它,用它是正确的方法,一定不能失败)