Shën. përkth.: Problemi i DNS në Kubernetes, përkatësisht - konfigurimi i parametrave ndots, - për habi, është mjaft popullor, madje . Në një shënim tjetër mbi këtë temë, autori i saj - inxhinier DevOps nga një kompani e madhe bursiere në Indi - flet në një mënyrë shumë të thjeshtë dhe të qartë për atë që është e rëndësishme të dinë kolegët që shfrytëzojnë Kubernetes.

Një nga avantazhet kryesore të shpërndarjes së aplikacioneve në Kubernetes është zbulimi pa probleme i aplikacioneve. Ndërveprimi brenda klasterit thjeshtohet ndjeshëm falë konceptit të shërbimit (), i cili përfaqëson një IP virtuale që mbështet një set IP adreshë pod-ësh. Për shembull, nëse shërbimi vanilla dëshiron të lidhet me shërbimin chocolate, ai mund të drejtohet drejtpërdrejt tek IP virtuale për chocolate. Kjo ngre pyetjen: kush do të zgjidhë kërkesën DNS në këtë rast dhe si? chocolate Zgjidhja e emrave DNS konfigurrohet në klasterin Kubernetes me anë të
CoreDNS të të gjitha pod-eve. Nëse shikoni përmbajtjen e /etc/resolv.conf çdo pod-i, ajo do të duket më ose më pak si më poshtë: /etc/resolv.conf search hello.svc.cluster.local svc.cluster.local cluster.local nameserver 10.152.183.10 options ndots:5
Kjo konfigurim përdoret nga klientët DNS për të drejtuar kërkesat tek serveri DNS. Në skedarin resolv.conf ndodhet informacioni i mëposhtëm: nameserver
- : serveri në të cilin do të drejtohen kërkesat DNS. Në rastin tonë, kjo është adresa e shërbimit CoreDNS;search
- : pĂ«rcakton rrugĂ«n e kĂ«rkimit pĂ«r njĂ« domain tĂ« caktuar. ĂshtĂ« interesante qĂ«mrkaran.dev
google.comosenuk janë FQDN (emra të plotë domainimrkaran.dev.është një emër i plotë domaini (FQDN), ndërsanuk është;nuk janë FQDN (: Parametri më interesant (ky artikull është pikërisht për të). - ndotspërcakton numrin prag të pikave në emrin e kërkesës, kur arrihet, konsiderohet si një emër domaini "i plotë". Më shumë për këtë do të flasim më vonë, kur të analizojmë sekuencën e kërkimit DNS.
ndotsLe të shohim se çfarë ndodh kur kërkojmë

në pod: nuk janë 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
Për këtë eksperiment, vendosa nivelin e regjistrimit të CoreDNS në Për këtë eksperiment, unë vendosa nivelin e regjistrimit CoreDNS në të gjitha (çfarë e bën atë shumë të fjalosur). Le të shikojmë logjët e pod-it 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.145091744sFuu. Dy gjëra këtu janë tërheqëse:
- Kërkesa kalon të gjitha fazat e kërkimit derisa përgjigjja të mos përmbajë kodin
NOERROR(klientët DNS e kuptojnë dhe e ruajnë atë si rezultat).NXDOMAINdo të thotë se për këtë emër domeni nuk është gjetur ndonjë regjistrim. Pasinuk janë FQDN (nuk është emër FQDN (sipasndots=5), zgjidhësi e shqyrton rrugën e kërkimit dhe përcakton rendin e kërkesave; - Regjistrimet
AdheAAAAvijnë paralelisht. E vërteta është se kërkesat e veçanta në/etc/resolv.confjanë parazgjedhur për të kryer kërkimin paralel në protokollet IPv4 dhe IPv6. Të gjitha këto mund të anulohen duke shtuar opsioninsingle-requestnëndodhet informacioni i mëposhtëm:.
VĂ«rejtje: glibc mund tĂ« konfigurohet pĂ«r tĂ« dĂ«rguar kĂ«to kĂ«rkesa radhazi, ndĂ«rsa musl âjo, kĂ«shtu qĂ« pĂ«rdoruesit e Alpine duhet ta kenĂ« parasysh kĂ«tĂ«.
Eksperimentojmë me ndots
Le të eksperimentojmë pak më shumë me ndots dhe të shohim si sillet ky parametër. Ideja është e thjeshtë: ndots përcakton nëse klienti DNS do ta konsiderojë domenin absolut ose relativ. Për shembull, si në rastin e thjeshtë, si e di klienti DNS që ky domen është absolut? Nëse vendosim ndots të jetë 1, klienti do të thotë: "O, në google nuk ka asnjë pikë; ndoshta do të kaloj në të gjithë listën e kërkimit". Megjithatë, nëse kërkohet google.com, lista e sufixeve do të injorohet plotësisht, pasi emri i kërkuar përmbush pragun ndots (ka të paktën një pikë).
Le të sigurohemi për këtë:
$ 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: NXDOMAINLog-et e 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 Pasi në mrkaran nuk ka asnjë pikë, kërkimi u zhvillua në të gjithë listën e sufixeve.
Vërejtje: në praktikë, vlera maksimale ndots është e limituar në 15; në Kubernetes është e parazgjedhur në 5.
Aplikimi në production
NĂ«se njĂ« aplikacion bĂ«n shumĂ« thirrje nĂ« rrjetin e jashtĂ«m, DNS mund tĂ« bĂ«het njĂ« vendngusht nĂ« rastin e trafikut tĂ« lartĂ«, pasi gjatĂ« zgjidhjes sĂ« emrit kryhen shumĂ« kĂ«rkesa tĂ« tepruara (para se sistemi tĂ« arrijĂ« te vendi i duhur). Aplikacionet zakonisht nuk i shtojnĂ« zonat e rrĂ«njĂ«s nĂ« emrat e domain-eve, megjithatĂ«, kjo Ă«shtĂ« njĂ« mĂ«nyrĂ« tepĂ«r e mençur. KĂ«shtu qĂ« nĂ« vend tĂ« kĂ«rkeseve pĂ«r api.twitter.com, mund tĂ« âhardcodeâ api.twitter.com. (me pika) nĂ« aplikacion, e cila do t'i inkurajojĂ« klientĂ«t DNS tĂ« kryejnĂ« kĂ«rkime autoritative menjĂ«herĂ« nĂ« domenin absolut.
Për më tepër, që nga versioni 1.14 i Kubernetes, zgjerimet dnsConfig dhe dnsPolicy kanë marrë statusin stabil. Pra, gjatë dislokimit të një pod-i, mund të zvogëloni vlerën ndots, le të themi, deri në 3 (madje edhe deri në 1!). Për shkak të kësaj, çdo mesazh brenda nodit do të duhet të përmbajë domenin e plotë. Ky është një nga kompromiset klasike kur duhet të zgjidhni midis.performancës dhe portabilitetit. Më duket se duhet të shqetësoheni për këtë vetëm në rast se vonesat e ulëta janë jetike për aplikacionin tuaj, pasi rezultatet e DNS gjithashtu cache-ohen brenda.
Linket
Për herë të parë për këtë veçori mora vesh në , që u mbajt më 25 janar. Aty u diskutua, midis të tjera, edhe për këtë problem.
Ja disa lidhje për studim të mëtejshëm:
- , pse ndots=5 në Kubernetes;
- rreth si ndikon ndryshimi i ndots në performancën e aplikacionit;
- mes resolver-eve musl dhe glibc.
ShĂ«nim: Preferova tĂ« mos pĂ«rdor dig nĂ« kĂ«tĂ« artikull. dig automaikisht shton pikĂ«n (identifikuesin e zonĂ«s rrĂ«njĂ«s), duke e bĂ«rĂ« domenin âtĂ« plotĂ«â (FQDN), jo duke e kaluar atĂ« paraprakisht pĂ«rmes listĂ«s sĂ« kĂ«rkimeve. Kam shkruar pĂ«r kĂ«tĂ« nĂ« . MegjithatĂ«, Ă«shtĂ« mjaft befasuese se, nĂ« pĂ«rgjithĂ«si, pĂ«r sjelljen standarde duhet tĂ« vendosni njĂ« flamur tĂ« veçantĂ«.
Gëzuar DNS-ing! Shihemi së shpejti!
P.S. nga përkthyesi
Lexoni gjithashtu në blogun tonë:
- «»;
- «»;
- âUdhĂ«zuesi i Ilustruar pĂ«r StrukturĂ«n e Rrjeteve nĂ« Kubernetesâ: , .
Burimi: habr.com
