DNS search in Kubernetes

MĂ€rkus tĂ”lke kohta.: DNS probleem Kubernetes'is, tĂ€psemalt - parameetri seadistamine ndots, - on ĂŒllatavalt populaarne, tĂ”si kĂŒll, juba ei esimest aasta. 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.

DNS search in Kubernetes

Üks peamisi eeliseid rakenduste juurutamisel Kubernetes'es on probleemidevaba rakenduste avastamine. Klusterisisene suhtlemine muutub oluliselt lihtsamaks teenuse mĂ”iste tĂ”ttu (Teenused), 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 CoreDNS. 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

DNS search in Kubernetes

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.145091744s

Huhh. 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). NXDOMAIN tĂ€hendab, et selle domeeninime jaoks ei leitud kirjet. Kuna ei ole FQDN ( ei ole FQDN-nimi (vastavalt ndots=5), resolver vaatab otsingu teed ja mÀÀrab pĂ€ringute jĂ€rjekorra;
  • Kirjed A ja AAAA tulevad paralleelselt. Probleem on selles, et ĂŒhekordsed pĂ€ringud /etc/resolv.conf on vaikimisi seadistatud nii, et tĂ”stetakse paralleelne otsing IPv4 ja IPv6 protokollide vahel. Sellist kĂ€itumist saab tĂŒhistada, kui lisada valik single-request ja resolv.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 K8s-meetup'il, mis toimus 25. jaanuaril. Seal arutati ka seda probleemi.

Siin on mÔned lingid edasiseks uurimiseks:

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 ĂŒhes varasemas postituses. 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:

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster