DNS meklēŔana Kubernetes

PiezÄ«me. tulk.: DNS problēma Kubernetes, precÄ«zāk, parametru iestatÄ«jumos ndots, ir pārsteidzoÅ”i populārs, un jau Ne pirmais gads. Citā piezÄ«mē par Å”o tēmu tās autors, DevOps inženieris no liela brokeru uzņēmuma Indijā, ļoti vienkārÅ”i un kodolÄ«gi stāsta par to, kas ir noderÄ«gi zināt kolēģiem, kas darbojas Kubernetes.

DNS meklēŔana Kubernetes

Viena no galvenajām priekÅ”rocÄ«bām, ko sniedz lietojumprogrammu izvietoÅ”ana vietnē Kubernetes, ir nevainojama lietojumprogrammu atklāŔana. Klastera iekŔējā mijiedarbÄ«ba ir ievērojami vienkārÅ”ota, pateicoties pakalpojuma koncepcijai (Serviss), kas ir virtuāls IP, kas atbalsta pod IP adreÅ”u kopu. Piemēram, ja pakalpojums vanilla vēlas sazināties ar dienestu chocolate, tas var tieÅ”i piekļūt virtuālajam IP chocolate. Rodas jautājums: kurÅ” Å”ajā gadÄ«jumā atrisinās DNS pieprasÄ«jumu chocolate Un kā?

DNS nosaukuma izŔķirtspēja ir konfigurēta Kubernetes klasterÄ«, izmantojot CoreDNS. Kubelet failos reÄ£istrē podiņu ar CoreDNS kā nosaukumu serveri /etc/resolv.conf visas pākstis. Ja paskatās uz saturu /etc/resolv.conf jebkurā podā, tas izskatÄ«sies apmēram Ŕādi:

search hello.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.152.183.10
options ndots:5

Šo konfigurāciju DNS klienti izmanto, lai pārsūtītu pieprasījumus uz DNS serveri. Failā resolv.conf satur Ŕādu informāciju:

  • vārdu serveris: serveris, uz kuru tiks nosÅ«tÄ«ti DNS pieprasÄ«jumi. MÅ«su gadÄ«jumā Ŕī ir CoreDNS pakalpojuma adrese;
  • Meklēt: definē meklÄ“Å”anas ceļu konkrētam domēnam. Tas ir interesanti google.com vai mrkaran.dev nav FQDN (pilnÄ«bā kvalificēti domēna vārdi). Saskaņā ar standarta konvenciju, ko ievēro lielākā daļa DNS risinātāju, tikai tie, kas beidzas ar punktu ".", kas apzÄ«mē saknes zonu, tiek uzskatÄ«ti par pilnÄ«bā kvalificētiem (FDQN) domēniem. Daži atrisinātāji paÅ”i var pievienot punktu. Tādējādi mrkaran.dev. ir pilnÄ«bā kvalificēts domēna vārds (FQDN), un mrkaran.dev - Nē;
  • ndots: Interesantākais parametrs (par to ir Å”is raksts). ndots norāda sliekŔņa punktu skaitu pieprasÄ«juma nosaukumā, pirms tas tiek uzskatÄ«ts par ā€œpilnÄ«bā kvalificētuā€ domēna nosaukumu. Mēs par to vairāk runāsim vēlāk, kad analizēsim DNS uzmeklÄ“Å”anas secÄ«bu.

DNS meklēŔana Kubernetes

Redzēsim, kas notiek, kad jautāsim mrkaran.dev podā:

$ nslookup mrkaran.dev
Server: 10.152.183.10
Address: 10.152.183.10#53

Non-authoritative answer:
Name: mrkaran.dev
Address: 157.230.35.153
Name: mrkaran.dev
Address: 2400:6180:0:d1::519:6001

Å im eksperimentam es iestatÄ«ju CoreDNS reÄ£istrÄ“Å”anas lÄ«meni uz all (kas padara to diezgan runÄ«gu). ApskatÄ«sim pāksts baļķus 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.145091744s

Fū. Šeit jūsu uzmanību piesaista divas lietas:

  • PieprasÄ«jums iziet cauri visiem meklÄ“Å”anas posmiem, lÄ«dz atbildē ir ietverts kods NOERROR (DNS klienti to saprot un rezultātā saglabā). NXDOMAIN nozÄ«mē, ka dotajam domēna vārdam netika atrasts ieraksts. Tāpēc ka mrkaran.dev nav FQDN nosaukums (saskaņā ar ndots=5), atrisinātājs aplÅ«ko meklÄ“Å”anas ceļu un nosaka pieprasÄ«jumu secÄ«bu;
  • Ieraksti Š Šø ŠŠŠŠ ierasties paralēli. Fakts ir tāds, ka tiek iesniegti vienreizēji pieprasÄ«jumi /etc/resolv.conf Pēc noklusējuma tie ir konfigurēti tā, lai paralēlā meklÄ“Å”ana tiktu veikta, izmantojot IPv4 un IPv6 protokolus. Varat atcelt Å”o darbÄ«bu, pievienojot opciju single-request Š² resolv.conf.

PiezÄ«me: glibc var konfigurēt, lai Å”os pieprasÄ«jumus nosÅ«tÄ«tu secÄ«gi, un musl - nē, tāpēc Alpu lietotājiem tas jāņem vērā.

EksperimentēŔana ar ndots

Eksperimentēsim nedaudz vairāk ar ndots un redzēsim, kā Å”is parametrs darbojas. Ideja ir vienkārÅ”a: ndots nosaka, vai DNS klients apstrādās domēnu kā absolÅ«tu vai relatÄ«vu. Piemēram, vienkārÅ”a Google DNS klienta gadÄ«jumā, kā tas zina, vai Å”is domēns ir absolÅ«ts? Ja iestatāt ndots vienāds ar 1, klients sacÄ«s: "Ak, iekŔā google nav viena punkta; Es domāju, ka es izieÅ”u cauri visam meklÄ“Å”anas sarakstam. Tomēr, ja jautā google.com, sufiksu saraksts tiks pilnÄ«bā ignorēts, jo pieprasÄ«tais nosaukums atbilst slieksnim ndots (ir vismaz viens punkts).

Pārliecināsimies par to:

$ 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 žurnāli:

[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

KopÅ” mrkaran nav neviena punkta, meklÄ“Å”ana tika veikta visā sufiksu sarakstā.

Piezīme: praksē maksimālā vērtība ndots ierobežots līdz 15; pēc noklusējuma programmā Kubernetes tas ir 5.

Pielietojums ražoŔanā

Ja lietojumprogramma veic daudz ārēju tÄ«kla zvanu, DNS var kļūt par saÅ”aurinājumu aktÄ«vas trafika gadÄ«jumā, jo vārda izŔķirtspēja rada daudz nevajadzÄ«gu vaicājumu (pirms sistēma sasniedz pareizo). Lietojumprogrammas parasti domēna nosaukumiem nepievieno saknes zonu, taču tas izklausās pēc uzlauÅ”anas. Tas ir, tā vietā, lai jautātu api.twitter.com, jÅ«s varat to "cietkodēt". api.twitter.com. (ar punktu) lietojumprogrammā, kas liks DNS klientiem veikt autoritatÄ«vus meklējumus tieÅ”i absolÅ«tajā domēnā.

Turklāt, sākot ar Kubernetes versiju 1.14, paplaÅ”inājumiem dnsConfig Šø dnsPolicy saņēma stabilu statusu. Tādējādi, izvietojot podziņu, varat samazināt vērtÄ«bu ndots, teiksim, lÄ«dz 3 (un pat lÄ«dz 1!). Tādēļ katrā ziņojumā mezglā bÅ«s jāiekļauj pilns domēns. Å is ir viens no klasiskajiem kompromisiem, kad jāizvēlas starp veiktspēju un pārnesamÄ«bu. Man Ŕķiet, ka jums par to jāuztraucas tikai tad, ja jÅ«su lietojumprogrammai ir ļoti mazs latentums, jo DNS rezultāti tiek saglabāti arÄ« iekŔēji keÅ”atmiņā.

atsauces

Es pirmo reizi uzzināju par Å”o funkciju K8s-meetup, kas notika 25. janvārÄ«. Cita starpā notika diskusija par Å”o problēmu.

Šeit ir dažas saites tālākai izpētei:

PiezÄ«me: es izvēlējos neizmantot dig Å”ajā rakstā. dig automātiski pievieno punktu (saknes zonas identifikatoru), padarot domēnu par "pilnÄ«bā kvalificētu" (FQDN), nē vispirms izpildot to meklÄ“Å”anas sarakstā. Par to rakstÄ«ja iekŔā viena no iepriekŔējām publikācijām. Tomēr diezgan pārsteidzoÅ”i, ka kopumā standarta uzvedÄ«bai ir jānorāda atseviŔķs karogs.

LaimÄ«gu DNS veidoÅ”anu! Tiksimies vēlāk!

PS no tulka

Lasi arī mūsu emuārā:

Avots: www.habr.com

Pievieno komentāru