【问题标题】:getaddrinfo: Temporary failure in name resolution kubernetes + corednsgetaddrinfo:名称解析暂时失败 kubernetes + coredns
【发布时间】:2019-10-04 21:52:27
【问题描述】:

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

自从我们将服务移至 kubernetes 后,我们不时出现getaddrinfo: Temporary failure in name resolution 错误。 (大多数调用都有效,但有些失败,这很奇怪。

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

【问题讨论】:

  • 您能否更具体地说明哪些呼叫失败?您如何处理其他服务?
  • 我正在多次调用集群外部的不同域(在网络上)。有时电话只是失败。 coredns 日志中的错误如下:<outside domain>.ec2.internal. AAAA: unreachable backend: read udp 10.0.158.199:51893->10.0.0.2:53: i/o timeout - coredns 试图访问 .ec2.internal 而不仅仅是 ,这很奇怪。另外,我不明白为什么超时。

标签: kubernetes coredns


【解决方案1】:

查看火种帖子,他们遇到了类似的问题:

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 总是以点结尾,而大多数时候我们可以省略它,用它是正确的方法,一定不能失败)

【讨论】:

  • 更新,kubernetes 1.18(发布时)将允许在 daemonset 中使用特殊的 DNS,因此每个节点都会有自己的本地 dns 绕过 conntrack 表,这将有助于解决此类问题
猜你喜欢
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
  • 2021-03-28
  • 2020-07-08
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
相关资源
最近更新 更多