Anmerkung des Ăbersetzers.: Ein DNS-Problem in Kubernetes, genauer gesagt - die Konfiguration des Parameters ndots, - ist ĂŒberraschend populĂ€r, und zwar bereits . In einem weiteren Beitrag zu diesem Thema beschreibt der Autor - ein DevOps-Ingenieur von einer groĂen Brokerage-Firma in Indien - auf sehr einfache und prĂ€gnante Weise, was nĂŒtzlich fĂŒr Kollegen zu wissen ist, die Kubernetes nutzen.

Einer der Hauptvorteile der Bereitstellung von Anwendungen in Kubernetes ist die problemlose Anwendungserkennung. Die interne Kommunikation zwischen Clustern wird durch das Konzept des Dienstes () erheblich vereinfacht, welches eine virtuelle IP-Adresse darstellt, die eine Gruppe von IP-Adressen der Pods unterstĂŒtzt. Zum Beispiel, wenn der Dienst vanilla mit dem Dienst chocolate, verbinden möchte, kann er sich direkt an die virtuelle IP fĂŒr chocolatewenden. Die Frage ist: Wer wird in diesem Fall die DNS-Anfrage zu chocolate auflösen und wie?
Die DNS-Namensauflösung wird im Kubernetes-Cluster mit Hilfe von konfiguriert. Kubelet trĂ€gt den Pod mit CoreDNS als Nameserver in die Dateien /etc/resolv.conf aller Pods ein. Wenn man sich den Inhalt /etc/resolv.conf eines Pods anschaut, sieht er ungefĂ€hr folgendermaĂen aus:
search hello.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.152.183.10
options ndots:5 Diese Konfiguration wird von DNS-Clients verwendet, um Anfragen an den DNS-Server weiterzuleiten. In der Datei resolv.conf befindet sich folgende Information:
- nameserver: der Server, an den die DNS-Anfragen geschickt werden. In unserem Fall ist dies die Adresse des CoreDNS-Dienstes;
- search: definiert den Suchpfad fĂŒr eine bestimmte Domain. Interessanterweise
google.comodermrkaran.devist kein FQDN (). Laut der Standardvereinbarung, der die meisten DNS-Resolver folgen, gelten nur die DomĂ€nen als vollstĂ€ndig (FQDN), die mit einem Punkt â.â enden, welcher die Wurzelzone reprĂ€sentiert. Einige Resolver können selbst einen Punkt hinzufĂŒgen. Somit istmrkaran.dev.ein vollstĂ€ndiger DomĂ€nenname (FQDN), wĂ€hrendmrkaran.devnicht ist; - ndots: Der interessanteste Parameter (darĂŒber handelt dieser Artikel).
ndotslegt die Schwelle der Punkte im Namensaufruf fest, ab der er als âvollstĂ€ndigerâ DomĂ€nenname betrachtet wird. Mehr dazu werden wir spĂ€ter sprechen, wenn wir die DNS-Suchsequenz analysieren.

Lassen Sie uns sehen, was passiert, wenn wir anfordern mrkaran.dev im Pod:
$ nslookup mrkaran.dev
Server: 10.152.183.10
Address: 10.152.183.10#53
Nicht-autorisierte Antwort:
Name: mrkaran.dev
Address: 157.230.35.153
Name: mrkaran.dev
Address: 2400:6180:0:d1::519:6001 FĂŒr dieses Experiment habe ich die Protokollierungsebene von CoreDNS auf all (was es ziemlich wortreich macht). Werfen wir einen Blick auf die Logs des Pods coredns:
[INFO] 10.1.28.1:35998 - 11131 "A IN mrkaran.dev.hello.svc.cluster.local. udp 53 false 512" NXDOMAIN qr,aa,rd 146 0.000263728s
[INFO] 10.1.28.1:34040 - 36853 "A IN mrkaran.dev.svc.cluster.local. udp 47 false 512" NXDOMAIN qr,aa,rd 140 0.000214201s
[INFO] 10.1.28.1:33468 - 29482 "A IN mrkaran.dev.cluster.local. udp 43 false 512" NXDOMAIN qr,aa,rd 136 0.000156107s
[INFO] 10.1.28.1:58471 - 45814 "A IN mrkaran.dev. udp 29 false 512" NOERROR qr,rd,ra 56 0.110263459s
[INFO] 10.1.28.1:54800 - 2463 "AAAA IN mrkaran.dev. udp 29 false 512" NOERROR qr,rd,ra 68 0.145091744sPuh. Zwei Dinge fallen hier auf:
- Die Anfrage durchlÀuft alle Suchphasen, bis die Antwort keinen Code enthÀlt
NOERROR(DNS-Clients verstehen dies und speichern es als Ergebnis).NXDOMAINbedeutet, dass fĂŒr diesen Domainnamen kein Eintrag gefunden wurde. Damrkaran.devkein FQDN-Name ist (gemĂ€Ăndots=5), schaut der Resolver auf den Suchpfad und bestimmt die Reihenfolge der Anfragen; - EintrĂ€ge
AundAAAAwerden parallel verarbeitet. Tatsache ist, dass Einzelanfragen in/etc/resolv.confstandardmĂ€Ăig so konfiguriert sind, dass eine parallele Suche ĂŒber die Protokolle IPv4 und IPv6 erfolgt. Dieses Verhalten kann durch HinzufĂŒgen der Optionsingle-requestinresolv.conf.
Hinweis: glibc konfiguriert werden, um diese Anfragen nacheinander zu senden, wĂ€hrend musl â nicht, daher sollten sich Alpine-Nutzer dessen bewusst sein.
Lassen Sie uns mit ndots experimentieren
Lassen Sie uns noch ein wenig mit ndots experimentieren und sehen, wie sich dieser Parameter verhĂ€lt. Die Idee ist einfach: ndots bestimmt, ob der DNS-Client die Domain als absolut oder relativ betrachtet. Zum Beispiel, wie erkennt der einfache Google-DNS-Client, ob diese Domain absolut ist? Wenn Sie ndots auf 1 setzen, sagt der Client: âOh, in google gibt es keinen Punkt; ich werde die gesamte Suchliste durchlaufenâ. Wenn jedoch angefordert wird, google.com, wird die Liste der Endungen vollstĂ€ndig ignoriert, da der angeforderte Name den Schwellenwert ndots erfĂŒllt (es gibt mindestens einen Punkt).
Lassen Sie uns das ĂŒberprĂŒfen:
$ cat /etc/resolv.conf
options ndots:1
$ nslookup mrkaran
Server: 10.152.183.10
Address: 10.152.183.10#53
** server kann mrkaran nicht finden: NXDOMAINCoreDNS-Logs:
[INFO] 10.1.28.1:52495 - 2606 "A IN mrkaran.hello.svc.cluster.local. udp 49 false 512" NXDOMAIN qr,aa,rd 142 0.000524939s
[INFO] 10.1.28.1:59287 - 57522 "A IN mrkaran.svc.cluster.local. udp 43 false 512" NXDOMAIN qr,aa,rd 136 0.000368277s
[INFO] 10.1.28.1:53086 - 4863 "A IN mrkaran.cluster.local. udp 39 false 512" NXDOMAIN qr,aa,rd 132 0.000355344s
[INFO] 10.1.28.1:56863 - 41678 "A IN mrkaran. udp 25 false 512" NXDOMAIN qr,rd,ra 100 0.034629206s Da in mrkaran gibt es keinen Punkt, die Suche erfolgte ĂŒber die gesamte Liste der Endungen.
Hinweis: In der Praxis liegt der Höchstwert ndots bei 15; standardmĂ€Ăig betrĂ€gt er in Kubernetes 5.
Einsatz in der Produktion
Wenn die Anwendung viele externe Netzwerkaufrufe macht, kann DNS bei aktivem Datenverkehr zum Engpass werden, da bei der Namensauflösung viele unnötige Anfragen gestellt werden (bevor das System das Ziel erreicht). Anwendungen fĂŒgen in der Regel keine Root-Zone zu Domainnamen hinzu, aber das könnte durchaus als Hack angesehen werden. Das heiĂt, anstatt api.twitter.com, können Sie 'hardcode' api.twitter.com. (mit Punkt) in der Anwendung, was DNS-Clients dazu anregen wird, sofort eine autoritative Abfrage im absoluten Domainnamen durchzufĂŒhren.
DarĂŒber hinaus haben Erweiterungen seit der Version Kubernetes 1.14 den stabilen Status erreicht. Somit kann beim Bereitstellen eines Pods der Wert dnsConfig und dnsPolicy zum Beispiel auf 3 (und sogar auf 1!) verringert werden. Daher muss jede Nachricht innerhalb des Knotens den vollstĂ€ndigen Domainnamen enthalten. Dies ist einer der klassischen Kompromisse, wenn man zwischen Leistung und PortabilitĂ€t wĂ€hlen muss. Ich glaube, dass man sich nur dann wirklich Sorgen darum machen sollte, wenn ultra-niedrige Latenzzeiten fĂŒr Ihre Anwendung von entscheidender Bedeutung sind, da die Ergebnisse von DNS ebenfalls im Speicher gehalten werden. ndotsDas erste Mal habe ich von diesem Feature auf dem
Links
K8s-Meetup Hier sind einige Links fĂŒr weiterfĂŒhrende Informationen:
Eine ErklÀrung
- Ein groĂartiges Material
- Unterschiede
- Hinweis: Ich habe entschieden, nicht zu verwenden
fĂŒgt automatisch einen Punkt hinzu (Identifikator der Root-Zone), wodurch die Domain âvollstĂ€ndigâ (FQDN) wird, dig in diesem Artikel. dig und sie vorher durch die Suchliste zu leiten. Ich habe darĂŒber bereits in nicht einem meiner vorherigen BeitrĂ€ge Gutes DNS-Handling! Bis bald!
đ„DNS-Suche in Kubernetes | ProHoster
P.S. vom Ăbersetzer
Lesen Sie auch in unserem Blog:
- «»;
- «»;
- âIllustriertes Handbuch zum Netzwerkaufbau in Kubernetesâ: , .
Quelle: habr.com
