У меня есть установка кластера Windows ACS с использованием k8s, которая в целом работает хорошо. Я развернул ASP.NET Core webapi и контейнеры рабочих приложений. Эти два контейнера отлично работают как локально, так и в целом в ACS. Я могу масштабировать их и обратно, развертывать новые версии и т. д.
Они функциональны и работают, но затем внезапно начинают генерировать ошибки разрешения DNS при попытке доступа к внешним интернет-ресурсам. Я вижу исключения, которые включают:
System.Net.Http.WinHttpException: имя или адрес сервера не могут быть разрешены
Ресурсы, к которым они пытаются получить доступ, прекрасно разрешаются, а затем внезапно перестают разрешаться. Затем через какое-то неопределенное время (несколько минут, 20 минут или даже, кажется, несколько часов) они снова начинают разрешаться, довольно прерывисто. Обратите внимание, что этими внешними ресурсами являются CosmosDB, Azure Queues и сторонняя служба ведения журналов под названием Loggly (точка в том, что все они являются крупными веб-ресурсами и не виноваты здесь). Также обратите внимание, что два контейнера не обязательно теряют DNS одновременно.
Я попытался открыть командную оболочку внутри контейнера:
kubectl exec -it {podname} -- powershell
А затем с помощью powershell запросить сайт:
invoke-webrequest -uri www.google.com -outfile test.txt
получить-контент test.txt
... и он работает нормально, я могу получить доступ к google.com. Поэтому я понятия не имею, как это отладить. Существуют ли известные проблемы с k8s в ACS, которые могут быть здесь задействованы?
Я развернул те же контейнеры на простом хосте Server 2016 и вообще не вижу проблемы. Таким образом, кажется, что это связано либо с k8s, либо с самим кластером ACS. Я перестраивал кластер ACS 4 или 5 раз в разных регионах (которые используют разные версии k8s) и вижу точно такую же проблему.
Для меня это главный блокатор. Внешний доступ в Интернет, очевидно, является очень базовой и основной функциональностью. Мой webapi и рабочее приложение полностью сломаны без него.