【问题标题】:External internet DNS resolution failures from Windows containersWindows 容器的外部 Internet DNS 解析失败
【发布时间】:2017-11-03 03:38:33
【问题描述】:

我有一个使用 k8s 的 ACS Windows 集群设置,通常运行良好。我已经部署了 ASP.NET Core webapi 和工作应用程序容器。这两个容器在本地运行良好,通常在 ACS 中也能正常运行。我可以扩展和扩展它们、部署新版本等。

它们正常工作,但在尝试访问外部 Internet 资源时突然开始生成 DNS 解析错误。我看到的异常包括:

System.Net.Http.WinHttpException:服务器名称或地址无法 得到解决

他们尝试访问的资源正常解析,然后突然停止解析。然后在一段不确定的时间后(几分钟、20 分钟,甚至似乎是几个小时),它们又开始消退,明显断断续续。请注意,这些外部资源是 CosmosDB、Azure 队列和名为 Loggly 的第 3 方日志服务(重点是它们都是大型 Web 属性,在这里没有错)。另请注意,两个容器不一定会同时丢失 DNS。

我尝试在容器内打开一个命令外壳:

kubectl exec -it {podname} -- powershell

然后使用powershell请求站点:

invoke-webrequest -uri www.google.com -outfile test.txt

get-content test.txt

...它工作正常,我可以访问 google.com。所以我不知道如何调试它。 ACS 上的 k8s 是否存在可能在此处起作用的已知问题?

我已将相同的容器部署到一个简单的 Server 2016 主机上,但根本没有发现问题。所以它似乎围绕着 k8s 或 ACS 集群本身。我已经在不同的区域(使用不同的 k8s 版本)重建了 ACS 集群 4 或 5 次,并看到完全相同的问题。

这对我来说是一个主要障碍。外部互联网访问显然是非常基本和核心的功能。没有它,我的 webapi 和工作应用程序完全崩溃了。

【问题讨论】:

    标签: kubernetes azure-container-service


    【解决方案1】:

    虽然我怀疑 Windows 容器网络代码中存在一些奇怪之处(过去一直......有问题),但您可能可以设置一个运行 dns 解析器的小型容器并将其添加为 kube-dns 配置映射中的上游服务器。如果问题与 kube-dns 转到外部名称服务器有关,则本地缓存可能会有所帮助。

    另一种选择是对 IP 进行硬编码,或者使用 https://kubernetes.io/docs/concepts/services-networking/service/#services-without-selectors 中的服务 或使用带有 HostsAliases 的 hosts 文件,如https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/中所述

    希望它有所帮助 - 间歇性 DNS 问题有时会让您觉得自己快要发疯了(我仍然认为,根据我的经验,一个未解决的案例是某处硬件损坏)。

    【讨论】:

    • 非常感谢您的建议。我绝对不会硬编码任何 IP(疯狂!),老实说,我也不会自己托管 DNS。两者都让我觉得是一个更大的问题的创可贴(我再次感谢您的意见!)。坦率地说,我需要 ACS 或 Windows Container 人员来帮助我,否则我担心 ACS 对我来说可能还太新。
    【解决方案2】:

    我已与 Microsoft 的 Windows DNS 团队进行了间接联系,并获得了对此问题的临时修复。

    将以下两个命令添加到任何出现问题的 pod 的 dockerfile 中:

    Set-Service dnscache -StartupType disabled
    Stop-Service dnscache
    

    重新部署,你应该会有更好的运气。我现在已经运行了 2 天并且看到零失败,而以前我会在几个小时内看到失败。由于缺少缓存,您可能会注意到 DNS 解析的延迟较高,但对我来说,这比彻底失败要好得多。另请注意,这不是生产使用的推荐策略。

    【讨论】:

    • 我在 Linux ACS 容器中遇到了同样的问题,其中像 bitbucket.com 这样的主机名间歇性地无法解析。
    猜你喜欢
    • 1970-01-01
    • 2019-02-03
    • 2020-09-18
    • 2023-03-22
    • 1970-01-01
    • 2020-05-21
    • 2021-06-09
    • 2022-01-24
    • 1970-01-01
    相关资源
    最近更新 更多