MĂ€rkus tĂ”lke kohta.: DNS probleem Kubernetes'is, tĂ€psemalt - parameetri seadistamine ndots, - on ĂŒllatavalt populaarne, tĂ”si kĂŒll, juba . JĂ€rjekordses selle teema mĂ€rkuses rÀÀgib selle autori - DevOps insener suurest maaklerifirmast Indias - ĂŒsna lihtsas ja lakoonilises stiilis, millest on kasulik teada kolleegidele, kes kasutavad Kubernetes't.

Ăks peamisi eeliseid rakenduste juurutamisel Kubernetes'es on probleemidevaba rakenduste avastamine. Klusterisisene suhtlemine muutub oluliselt lihtsamaks teenuse mĂ”iste tĂ”ttu (), mis esindab virtuaalset IP-aadressi, toetades pod'ide IP-aadresside komplekti. NĂ€iteks, kui teenus vanilla. tahab suhelda teenusega chocolate, vĂ”ib ta otse pöörduda virtuaalse IP poole chocolate. KĂŒsimus on: kes sel juhul lahendab DNS-pĂ€ringu chocolate ja kuidas?
DNS nime lahendamine seadistatakse Kubernetes klastris abil . Kubelet mÀÀrab pod'i CoreDNS'i nime serverina failides /etc/resolv.conf kÔikide pod'ide. Kui vaatame mÔne pod'i sisu, nÀeb see vÀlja umbes jÀrgmine: /etc/resolv.conf search hello.svc.cluster.local svc.cluster.local cluster.local nameserver 10.152.183.10 options ndots:5
See konfiguratsioon kasutatakse DNS-klientide poolt, et suunata pÀringud DNS-serverisse. Failis on jÀrgmine teave: resolv.conf nameserver
- : server, kuhu DNS-pÀringud suunatakse. Meie puhul on see CoreDNS teenuse aadress;: mÀÀrab teatud domeeni otsingu tee. Huvi pakub, et
- searchmrkaran.dev
google.comvĂ”iei ole FQDN (tĂ€ielikud domeeninimedmrkaran.dev.on tĂ€ielik domeeninimi (FQDN), kuidei ole;ei ole FQDN (: KĂ”ige huvitavam parameeter (see artikkel on just selle kohta). - ndotsmÀÀrab pĂ€ringu nime punktide lĂ€vearvu, mille saavutamisel kĂ€sitletakse seda kui âtĂ€ielikkuâ domeeninime. RÀÀgime sellest ĂŒksikasjalikumalt hiljem, kui analĂŒĂŒsime DNS-otsingu jĂ€rjestust.
ndotsVaadakem, mis juhtub, kui kĂŒsime

pod'is: ei ole FQDN ( $ nslookup mrkaran.dev Server: 10.152.183.10 Address: 10.152.183.10#53Non-authoritative answer: Name: mrkaran.dev Address: 157.230.35.153 Name: mrkaran.dev Address: 2400:6180:0:d1::519:6001
Selle eksperimendi jaoks seadsin CoreDNS'i logimise taseme ĂŒletama all (mis teeb selle ĂŒsna sĂ”nakaks). Vaadakem pod'i logisid 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.145091744sHuhh. Kaks asja tÔmbavad siin tÀhelepanu:
- PÀring lÀbib kÔik otsingu etapid, kuni vastus sisaldab koodi
NOERROR(DNS-kliendid mÔistavad seda ja salvestavad tulemuseks).NXDOMAINtÀhendab, et selle domeeninime jaoks ei leitud kirjet. Kunaei ole FQDN (ei ole FQDN-nimi (vastavaltndots=5), resolver vaatab otsingu teed ja mÀÀrab pÀringute jÀrjekorra; - Kirjed
AjaAAAAtulevad paralleelselt. Probleem on selles, et ĂŒhekordsed pĂ€ringud/etc/resolv.confon vaikimisi seadistatud nii, et tĂ”stetakse paralleelne otsing IPv4 ja IPv6 protokollide vahel. Sellist kĂ€itumist saab tĂŒhistada, kui lisada valiksingle-requestjaresolv.conf.
MÀrkus: glibc saab seadistada nende pÀringute jÀrkjÀrguliseks saatmiseks, kuid musl ei saa, nii et Alpine'i kasutajad peaksid seda silmas pidama.
Katsetame ndotsâi
Tehkem veel mĂ”ned eksperimendid ndots ja vaatame, kuidas see parameeter kĂ€itub. Idee on lihtne: ndots mÀÀrab, kas DNS-kliendile tundub domeen absoluutne vĂ”i suhteline. NĂ€iteks, kuidas google DNS-kliendi puhul tunnistatakse selle domeeni absoluutseks? Kui seada ndots ĂŒhtseks 1, ĂŒtleb klient: âOo, siin ei ole ĂŒhtegi punkti; ma vaatan kogu otsingulisti lĂ€biâ. Kuid kui kĂŒsida google , siis otsingu sufiksite nimekiri jĂ€etakse tĂ€ielikult tĂ€helepanuta, kuna kĂŒsitud nimi vastab kĂŒnnisele google.com(eksisteerib vĂ€hemalt ĂŒks punkt). ndots Veendugem selles:
$ cat /etc/resolv.conf options ndots:1 $ nslookup mrkaran Server: 10.152.183.10 Address: 10.152.183.10#53** server can't find mrkaran: NXDOMAIN
CoreDNS logid:[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
Kuna mrkaran ei sisalda ĂŒhtegi punkte, toimus otsing kogu sufiksite nimekirja kaudu. MĂ€rkus: praktikas on maksimaalne vÀÀrtus
piiratud 15; vaikimisi Kuberneteses on see 5. ndots Kasutamine tootmises
ĐŃĐžĐŒĐ”ĐœĐ”ĐœĐžĐ” ĐČ production
Kui rakendus teeb palju vĂ€liseid vĂ”rgu kĂŒsitlusi, vĂ”ib DNS aktiivse liikluse korral muutuda pudelikaelaks, kuna nime lahendamise protsessis toimub palju ĂŒleliigseid pĂ€ringuid (enne kui sĂŒsteem jĂ”uab soovitud tulemuseni). Rakendused ei lisa tavaliselt juurkontrollitud tsooni domeeninimedele, kuid see on omamoodi nipp. See tĂ€hendab, et selle asemel, et kĂŒsida api.twitter.com, vĂ”ite 'hardcode'ida api.twitter.com. (punktiga) rakendusse, mis paneb DNS-kliente tegema autoriteetset otsingut kohe absoluutne domeeni.
Lisaks, alates versioonist Kubernetes 1.14 on laiendid dnsConfig ja dnsPolicy saand saanud stabiilse staatuse. Seega, kui rakendate poodâi, vĂ”ib vÀÀrtust vĂ€hendada ndots, ĂŒtleme, 3-le (ja isegi 1-le!). Selle tulemusena peab igas sĂ”numis sĂ”lmpunktis olema tĂ€ielik domeen. See on ĂŒks klassikalisi kompromisse, kus tuleb valida jĂ”udluse ja ĂŒlekantavuse vahel. Minu arvates tasub selle pĂ€rast muretseda ainult siis, kui ĂŒli madalad viivitused on teie rakenduse jaoks eluliselt olulised, kuna DNS-i tulemusi ka vahemĂ€lu.
Viidatud lingid
Esimest korda kuulsin sellest omadusest , mis toimus 25. jaanuaril. Seal arutati ka seda probleemi.
Siin on mÔned lingid edasiseks uurimiseks:
- , miks ndots=5 Kuberneteses;
- sellest, kuidas ndots'i muutmine mÔjutab rakenduse jÔudlust;
- resolver'ite musl ja glibc vahel.
MĂ€rkus: Otsustasin seda mitte kasutada dig selles artiklis. dig automaatselt lisab punkti (juurkontrollitud tsooni identifikaatori), muutes domeeni 'tĂ€ielikuks' (FQDN), ei töötades seda eelnevalt otsinguloendi kaudu. Olen sellest kirjutanud . Siiski on ĂŒsna ĂŒllatav, et tavalise kĂ€itumise saavutamiseks peab olema eraldi lipp.
Head DNS-ingit! NĂ€gemist!
P.S. tÔlkijalt
Lugege ka meie blogist:
- «»;
- «»;
- «Kubernetese vĂ”rgu ĂŒlesehituse illustreeritud juhend»: , .
Allikas: habr.com
