我有一个使用 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 请求一个站点:
调用-webrequest -uri www.google.com -outfile test.txt
获取内容 test.txt
...它工作正常,我可以访问 google.com。所以我不知道如何调试它。ACS 上的 k8s 是否存在可能在此处起作用的已知问题?
我已经将相同的容器部署到一个简单的 Server 2016 主机上,根本看不到问题。所以它似乎围绕着 k8s 或 ACS 集群本身。我已经在不同的区域(使用不同的 k8s 版本)重建了 ACS 集群 4 或 5 次,并看到完全相同的问题。
这对我来说是一个主要障碍。外部互联网访问显然是非常基本和核心的功能。没有它,我的 webapi 和 worker 应用程序就完全崩溃了。