代码之家  ›  专栏  ›  技术社区  ›  Stefano Modena

kubernetes集群内节点pod中的getaddrinfo ENOENT错误

  •  0
  • Stefano Modena  · 技术社区  · 3 年前

    我在我们的项目中发现了一个问题,在K8s集群中用Nodejs编写的不同微服务有时会由于名称解析错误而导致http调用出错。

    例如,当一个服务试图在同一命名空间内调用另一个名为crud服务的服务时,会出现一个异常:

    Error: getaddrinfo ENOENT crud-service
        at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:109:26)
        at GetAddrInfoReqWrap.callbackTrampoline (node:internal/async_hooks:130:17)
    

    到目前为止,我们可以说:

    • 这种情况偶尔发生,没有明确的原因。
    • 如果我们尝试使用命令从pod解析主机crud服务 nslookup crud-service 工作得很好。
    • 这种问题发生在许多pod上,当我们试图访问集群外部的主机时也是如此
    • 我们不认为这个问题与DNS服务器有关,在这种情况下,我们应该有一个EAI_AGAIN错误,如果我们调用一个无效的主机,我们应该会有一个ENOTFOUND错误

    你有调试这个问题的想法吗? 你知道如何知道ENOENT错误的原因吗?

    非常感谢。

    0 回复  |  直到 3 年前
        1
  •  0
  •   Stefano Modena    3 年前

    我们通过在集群上禁用Dynatrace找到了解决方案。 我们正在进行进一步的调查。