/etc/resolv.conf fir Kubernetes Pods, ndots:5 Optioun, wéi dëst en negativen Impakt op d'Applikatioun Leeschtung

/etc/resolv.conf fir Kubernetes Pods, ndots:5 Optioun, wéi dëst en negativen Impakt op d'Applikatioun Leeschtung

Mir hunn viru kuerzem Kubernetes 1.9 op AWS mat Kops gestart. Gëschter, wärend ech neie Traffic glat an de gréisste vun eise Kubernetes Cluster ausrollen, hunn ech ugefaang ongewéinlech DNS Numm Resolutiounsfehler ze bemierken, déi vun eiser Applikatioun protokolléiert sinn.

Et gëtt zimmlech vill iwwer dëst op GitHub geschwat, also hunn ech decidéiert et och erauszefannen. Um Enn hunn ech gemierkt datt an eisem Fall dëst duerch déi verstäerkte Belaaschtung verursaacht gëtt kube-dns и dnsmasq. Déi interessantst an nei Saach fir mech war de Grond fir déi bedeitend Erhéijung vum DNS Ufro Traffic. Mäi Post ass iwwer dëst a wat ech dermat maachen.

DNS Resolutioun am Container - wéi an all Linux System - gëtt vun der Konfiguratiounsdatei festgeluegt /etc/resolv.conf. Standard Kubernetes dnsPolicy et ClusterFirst, dat heescht datt all DNS Ufro un dnsmasq, Lafen an engem Pod kube-dns am Cluster, deen am Tour d'Ufro un d'Applikatioun weiderginn kube-dns, wann den Numm mat engem Cluster Suffix endet, oder soss op e méi héijen Niveau DNS Server.

Fichier /etc/resolv.conf bannent all Container gesäit de Standard esou aus:

nameserver 100.64.0.10
search namespace.svc.cluster.local svc.cluster.local cluster.local 
eu-west-1.compute.internal
options ndots:5

Wéi Dir gesitt, ginn et dräi Direktiven:

  1. Den Nummserver ass d'IP vum Service kube-dns
  2. 4 lokal Sich Domainen uginn search
  3. Et gëtt eng Optioun ndots:5

Den interessanten Deel vun dëser Konfiguratioun ass wéi déi lokal Sich Domainen an Astellungen ndots:5 zesumme kommen. Fir dëst ze verstoen, musst Dir verstoen wéi DNS Resolutioun fir onqualifizéiert Nimm funktionnéiert.

Wat ass e vollen Numm?

E voll qualifizéierten Numm ass en Numm fir dee keng lokal Lookup ausgefouert gëtt an den Numm gëtt als absolutt ugesinn wärend der Nummresolutioun. Duerch d'Konventioun betruecht DNS Software en Numm als vollqualifizéiert wann et mat engem Punkt endet (.), An soss net komplett qualifizéiert. Dat ass google.com. voll definéiert an google.com - Nee.

Wéi gëtt en onqualifizéierten Numm behandelt?

Wann eng Applikatioun mam Remotehost verbënnt, deen am Numm spezifizéiert ass, gëtt DNS Nummresolutioun typesch mat engem Systemruff gemaach, z. getaddrinfo(). Awer wann den Numm onqualifizéiert ass (ent net mat .), Ech froe mech ob de System Uruff probéiert den Numm als absoluten Numm fir d'éischt ze léisen, oder fir d'éischt duerch déi lokal Sichberäicher ze goen? Et hänkt vun der Optioun of ndots.

Aus dem Handbuch resolv.conf:

ndots:n

устанавливает порог для количества точек, которые должны появиться в имени, прежде чем будет сделан начальный абсолютный запрос. Значение по умолчанию для n равно 1, что означает, что если в имени есть какие-либо точки, имя будет сначала опробовано как абсолютное имя, прежде чем к нему будут добавлены какие-либо элементы списка поиска.

Dat heescht, datt wann fir ndots gëtt e Wäert vu 5 an den Numm enthält manner wéi 5 Punkten, wäert de System Uruff probéieren et sequenziell ze léisen, fir d'éischt all lokal Sichberäicher duerchzegoen, a wann et net erfollegräich ass, schlussendlech als absoluten Numm opléisen.

Firwat dann ndots:5 kéint et negativ Auswierkungen op d'Applikatioun Leeschtung?

Wéi Dir Iech virstellen kënnt, wann Är Applikatioun vill externen Traffic benotzt, fir all TCP Verbindung etabléiert (oder méi genee, fir all Numm geléist), wäert et 5 DNS Ufroen erausginn ier den Numm richteg geléist ass, well et fir d'éischt duerch geet 4 lokal Sich Domain, an um Enn wäert eng absolut Numm Resolutioun Ufro erausginn.

Déi folgend Diagramm weist de Gesamtverkéier op eisen 3 kube-dns Moduler virum an nodeems mir déi puer Hostnamen, déi an eiser Applikatioun konfiguréiert sinn, op voll qualifizéiert gewiesselt hunn.

/etc/resolv.conf fir Kubernetes Pods, ndots:5 Optioun, wéi dëst en negativen Impakt op d'Applikatioun Leeschtung

Déi folgend Diagramm weist d'Applikatioun Latenz virun an nodeems mir e puer Hostnamen, déi an eiser Applikatioun konfiguréiert sinn, op voll Nimm gewiesselt hunn (déi vertikal blo Linn ass d'Deployment):

/etc/resolv.conf fir Kubernetes Pods, ndots:5 Optioun, wéi dëst en negativen Impakt op d'Applikatioun Leeschtung

Léisung #1 - Benotzt voll qualifizéiert Nimm

Wann Dir e puer statesch extern Nimm hutt (dh an der Applikatiounskonfiguratioun definéiert) op déi Dir eng grouss Zuel vu Verbindungen erstellt, ass vläicht déi einfachst Léisung se op voll qualifizéiert ze wiesselen andeems Dir se einfach addéiert. um Enn.

Dëst ass keng definitiv Léisung, awer et hëlleft séier, awer net propper, d'Situatioun ze verbesseren. Mir hunn dëse Patch applizéiert fir eise Problem ze léisen, d'Resultater vun deenen an de Screenshots uewen gewisen.

Léisung #2 - Personnalisatioun ndots в dnsConfig

Am Kubernetes 1.9 ass d'Funktionalitéit am Alpha Modus erschéngt (Beta Versioun v1.10), wat Iech erlaabt d'DNS-Parameteren duerch d'Pod-Eegeschaft besser ze kontrolléieren dnsConfig. Ënner anerem erlaabt et Iech de Wäert ze konfiguréieren ndots fir eng spezifesch Pod, d.h.

apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: dns-example
spec:
  containers:
    - name: test
      image: nginx
  dnsConfig:
    options:
      - name: ndots
        value: "1"

Quellen vun Informatiounen

Liest och aner Artikelen op eisem Blog:

Source: will.com

Setzt e Commentaire