Obs. overs.: DNS-problemet i Kubernetes, mer spesifikt â konfigurasjonen av parameteren ndots, â er overraskende populĂŠrt, faktisk allerede . I en ny artikkel om dette temaet forklarer forfatteren â en DevOps-ingeniĂžr fra et stort meglerfirma i India â pĂ„ en ganske enkel og kortfattet mĂ„te hva kolleger som bruker Kubernetes bĂžr vite.

En av de viktigste fordelene ved Ă„ distribuere applikasjoner i Kubernetes â problemfri oppdagelse av applikasjoner. Interne klyngeinteraksjoner forenkles betydelig takket vĂŠre konseptet med en tjeneste (), som representerer en virtuell IP som stĂžtter et sett med IP-adresser for pods. For eksempel, hvis tjenesten vanilla Ăžnsker Ă„ koble til tjenesten chocolate, kan den kontakte den virtuelle IP-en direkte for chocolate. SpĂžrsmĂ„let oppstĂ„r: hvem vil i dette tilfellet lĂžse DNS-forespĂžrselen til chocolate og hvordan?
DNS-navneopplÞsning konfigureres i Kubernetes-klyngen ved hjelp av . Kubelet angir pod med CoreDNS som navneserver i filene /etc/resolv.conf til alle pods. Hvis vi ser pÄ innholdet i /etc/resolv.conf en hvilken som helst pod, vil den se omtrent slik ut:
search hello.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.152.183.10
options ndots:5 Denne konfigurasjonen brukes av DNS-klienter for Ă„ sende forespĂžrslene til DNS-serveren. I filen resolv.conf finnes fĂžlgende informasjon:
- nameserver: serveren som DNS-forespÞrslene vil bli sendt til. I vÄrt tilfelle er dette adressen til CoreDNS-tjenesten;
- search: angir sĂžkestien for et spesifikt domene. Det er interessant at
google.comellermrkaran.devikke er FQDN (). I henhold til standardavtalen som de fleste DNS-resolvere fĂžlger, anses domener som fullstendige (FQDN) bare hvis de slutter med et punkt «.», som representerer rotsonen. Noen resolvere kan legge til et punkt selv. Dermed ermrkaran.dev.â et fullstendig domenenavn (FQDN), mensmrkaran.devâ ikke; - ndots: Den mest interessante parameteren (denne artikkelen handler faktisk om den).
ndotsangir terskelverdien for antall punkter i navnet som en forespÞrsel har, og nÄr denne terskelen nÄs, anses den som et «fullstendig» domenenavn. Mer om dette vil vi diskutere senere, nÄr vi analyserer sekvensen av DNS-oppslag.

La oss se hva som skjer nÄr vi forespÞr mrkaran.dev i pod-en:
$ nslookup mrkaran.dev
Server: 10.152.183.10
Address: 10.152.183.10#53
Ikke-autoritativt svar:
Navn: mrkaran.dev
Adresse: 157.230.35.153
Navn: mrkaran.dev
Adresse: 2400:6180:0:d1::519:6001 For dette eksperimentet har jeg satt logging-nivĂ„et til CoreDNS til all (som gjer det ganske omstendelig). La oss se pĂ„ loggene til podâen 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. To ting her tiltrekker oppmerksomhet:
- ForespÞrselen gÄr gjennom alle sÞketrinnene sÄ lenge svaret ikke inneholder koden
NOERROR(DNS-klienter forstÄr det og lagrer det som et resultat).NXDOMAINbetyr at det ikke ble funnet noen oppfÞring for dette domenenavnet. Fordimrkaran.devikke er et FQDN-navn (i henhold tilndots=5), resolveren ser pÄ sÞkestien og bestemmer rekkefÞlgen pÄ forespÞrslene; - OppfÞringene
AogAAAAsendes parallelt. Poenget er at enkeltforespĂžrslene i/etc/resolv.confsom standard er konfigurert slik at det skjer et parallelt sĂžk over IPv4 og IPv6-protokollene. Dette atferden kan avbrytes ved Ă„ legge til alternativetsingle-requestiresolv.conf.
Merk: glibc som kan konfigureres for sekvensiell sending av disse forespĂžrslene, mens musl â det kan ikke, sĂ„ brukere av Alpine bĂžr ta dette i betraktning.
La oss eksperimentere med ndots
La oss eksperimentere litt mer med ndots og se hvordan denne parameteren oppfĂžrer seg. Ideen er enkel: ndots definerer om DNS-klienten skal behandle domenet som absolutt eller relativt. For eksempel, hvordan kan en enkel google DNS-klient vite om dette domenet er absolutt? Hvis du setter ndots til 1, vil klienten si: «Ă
h, i google det er ingen prikker; kanskje jeg skal se gjennom hele sÞkelisten». Men hvis du forespÞr google.com, vil listen over suffikser bli helt ignorert, siden det forespurte navnet tilfredsstiller grensen ndots (det er minst én prikk).
La oss forsikre oss om dette:
$ cat /etc/resolv.conf
options ndots:1
$ nslookup mrkaran
Server: 10.152.183.10
Address: 10.152.183.10#53
** server kan ikke finne mrkaran: NXDOMAINLoggar för CoreDNS:
[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 Sidan ein kan ikkje definere tabellhint, mĂ„ ein lage ei ny visning â «innpakning» av fĂžlgjande slag: mrkaran det er ingen prikker, sĂžket ble gjort gjennom hele listen over suffikser.
Merk: i praksis er den maksimale verdien ndots begrenset til 15; standardverdien i Kubernetes er 5.
Bruk i produksjon
Hvis en applikasjon gjÞr mange eksterne nettverksanrop, kan DNS bli en flaskehals under aktiv trafikk, ettersom det gjÞr mange unÞdvendige forespÞrselser nÄr den lÞser navnet fÞr systemet kommer til mÄlet. Applikasjoner legger vanligvis ikke til rotsonen til domenenavnene, men dette kan absolutt betraktes som en hack. Det vil si at i stedet for Ä be om api.twitter.com, kan du 'hardcode'e api.twitter.com. (med punktum) i applikasjonen, noe som vil fÄ DNS-klienter til Ä utfÞre en autoritativ sÞk med en gang i det absolutte domenet.
I tillegg, fra og med Kubernetes versjon 1.14, har utvidelser dnsConfig og dnsPolicy fÄtt stabil status. Dermed kan verdien nÄr du distribuerer en pod reduseres, la oss si, til 3 (og til og med til 1!). PÄ grunn av dette mÄ hver melding innenfor noden inkludere det fullstendige domenet. Dette er et klassisk kompromiss nÄr du mÄ velge mellom ytelse og bÊrbarhet. Jeg mener det er verdt Ä bekymre seg for dette bare hvis ekstremt lave forsinkelser er avgjÞrende for applikasjonen din, ettersom DNS-resultater ogsÄ blir hurtigbufret internt. ndotsJeg lÊrte om denne funksjonen for fÞrste gang pÄ
Lenker
K8s-meetup Her er noen lenker for videre studier:
, hvorfor ndots=5 i Kubernetes;
- Flott materiale
- Uoverensstemmelser
- Merk: Jeg valgte Ă„ ikke bruke
i denne artikkelen. dig automatisk legger til et punkt (roten identifikator), som gjĂžr domenet "fullt" (FQDN), dig ved Ă„ kjĂžre det gjennom sĂžklisten fĂžrst. Jeg skrev om dette i ikke et tidligere innlegg God DNSâing! Vi sees snart!
đ„DNS-sĂžk i Kubernetes | ProHoster
P.S. from the translator
Also read in our blog:
- «»;
- «»;
- Illustrated Guide to Networking in Kubernetes: , .
Kilde: habr.com
