2017-09-20 1 views
0

Ich habe ein ACS-Windows-Cluster-Setup mit k8s, das im Allgemeinen gut läuft. Ich habe ASP.NET Core Webapi und Worker App Container bereitgestellt. Diese zwei Behälter funktionieren lokal und allgemein in ACS gut. Ich kann sie aus-und zurück skalieren, neue Versionen, etc.Externe Internet-DNS-Auflösungsfehler von Windows-Containern

Sie sind funktional und arbeiten und doch dann plötzlich zu erstellen DNS-Auflösung Fehler beim Versuch, auf externe Internet-Ressourcen zuzugreifen. Ich Ausnahmen zu sehen, darunter:

System.Net.Http.WinHttpException: Der Servername oder Adresse konnte nicht

Die Ressourcen gelöst werden sie versuchen, Entschlossenheit fein zuzugreifen und dann plötzlich höre auf zu lösen. Dann nach einer unbestimmten Zeit (ein paar Minuten, 20 Minuten oder sogar ein paar Stunden, wie es scheint) fangen sie an, sich wieder aufzulösen, ziemlich zeitweise zu löschen. Beachten Sie, dass es sich bei diesen externen Ressourcen um CosmosDB, Azure Queues und einen Logging-Dienst eines Drittanbieters mit dem Namen Loggly handelt (da es sich hierbei um große Web-Eigenschaften handelt, die hier nicht fehlerhaft sind). Beachten Sie auch, dass die beiden Container nicht gleichzeitig DNS verlieren.

Ich habe versucht, ein Befehls-Shell im Innern des Behälter zu öffnen:

kubectl exec -en {podname} - Power

Und dann Powershell mit einer Website zu beantragen:

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

Get-Inhaltstest. txt

... und es funktioniert gut, ich kann auf google.com zugreifen. Also habe ich keine Ahnung, wie ich das debuggen soll. Gibt es bekannte Probleme mit k8s bei ACS, die hier auftreten könnten?

Ich habe die gleichen Container auf einem einfachen Server 2016-Host bereitgestellt und sehe das Problem überhaupt nicht. Es scheint sich also entweder um k8s oder den ACS-Cluster selbst zu drehen. Ich habe den ACS-Cluster 4 oder 5 Mal in verschiedenen Regionen (die verschiedene k8s-Versionen verwenden) neu aufgebaut und sehe genau das gleiche Problem.

Dies ist ein großer Blocker für mich. Externer Internetzugang ist offensichtlich sehr einfach und Kernfunktionalität. Meine Webapi und Worker App sind ohne sie komplett kaputt.

Antwort

0

Ich hatte indirekten Kontakt mit dem Windows DNS-Team bei Microsoft und wurde eine temporäre Lösung für dieses Problem angeboten.

Fügen Sie die folgenden zwei Befehle an die dockerfile aller Schoten, die das Problem aufweisen, sind:

Set-Service dnscache -StartupType disabled 
Stop-Service dnscache 

erneut bereitstellen und Sie sollten mehr Glück haben. Ich bin jetzt seit 2 Tagen gelaufen und habe keine Fehlschläge gesehen, während ich früher innerhalb weniger Stunden Fehler sehen würde. Sie werden möglicherweise eine höhere Latenz bei DNS-Auflösungen feststellen, da das Caching nicht ausreicht, aber für mich ist dies viel besser als vollständige Fehler. Beachten Sie auch, dass dies keine empfohlene Strategie für die Produktion ist.

0

Während ich etwas Seltsamkeit in Windows-Container-Netzwerk-Code vermuten (es war ... in der Vergangenheit problematisch), könnten Sie wahrscheinlich einen kleinen Container einen DNS-Resolver einrichten und fügen Sie es als Upstream-Server in Kube-DNS-Config-Karte. Wenn das Problem damit zusammenhängt, dass Kube-DNS zum externen Nameserver geht, könnte ein lokaler Cache helfen.

Eine andere Möglichkeit wäre es, die IP-Adressen zu codieren, entweder mit Dienst wie in https://kubernetes.io/docs/concepts/services-networking/service/#services-without-selectors oder von Hosts verwenden mit HostsAliases Datei, in https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/

beschrieben wie Hoffe, es hilft - Intermittent DNS Probleme manchmal Sie sich wie Sie fühlen können Ich werde verrückt (ich denke immer noch, dass ein ungelöster Fall in meiner Erfahrung ein gebrochener hw irgendwo war).

+0

Die Vorschläge zu schätzen wissen. Ich werde definitiv keine IP's hart kodieren (Wahnsinn!), Und ehrlich gesagt werde ich DNS auch nicht selbst hosten. Beide treffen mich als Bandaids auf ein viel größeres Problem (und ich schätze den Input!). Ehrlich gesagt, ich brauche die ACS- oder Windows-Container-Jungs, um aufzustehen und zu helfen, oder ich fürchte, ACS könnte für mich zu frisch sein. – BrettRobi

Verwandte Themen