Lêgerîna DNS li Kubernetes

Not. werger.: Pirsgirêka DNS-ê di Kubernetes de, an jî rasttir, mîhengên parametreyê ndots, ecêb populer e, û jixwe Ne pêşî îsal. Di notek din a li ser vê mijarê de, nivîskarê wê, endezyarek DevOps ji pargîdaniyek brokerker a mezin li Hindistanê, bi rengek pir hêsan û kurt diaxive ka çi ji bo hevkarên ku Kubernetes dixebitin bikêr e ku bizanibin.

Lêgerîna DNS li Kubernetes

Yek ji feydeyên sereke yên bicihkirina sepanan li Kubernetes vedîtina serîlêdana bêkêmasî ye. Bi konsepta karûbarê danûstendina hundurîn-klusterê pir hêsan e (Xizmetkar), ku IP-ya virtual e ku komek navnîşanên IP-ya pod piştgirî dike. Ji bo nimûne, eger xizmetê vanilla dixwaze bi xizmetê re têkilî daynin chocolate, ew rasterast dikare bigihîje IP-ya virtual ji bo chocolate. Pirs derdikeve: di vê rewşê de kî dê daxwaza DNS çareser bike chocolate Û Çawa?

Çareserkirina navê DNS-ê li ser komek Kubernetes bi kar tê mîheng kirin CoreDNS. Kubelet di pelan de podek bi CoreDNS re wekî serverek navan tomar dike /etc/resolv.conf hemî pîvaz. Ger hûn li naverokê binêrin /etc/resolv.conf her pod, ew ê tiştek wusa xuya bike:

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

Ev veavakirin ji hêla xerîdarên DNS ve tê bikar anîn da ku daxwaznameyên pêşkêşkara DNS bişînin. Di pelê de resolv.conf agahdariya jêrîn heye:

  • nameserver: servera ku dê daxwazên DNS-ê jê re werin şandin. Di doza me de, ev navnîşana karûbarê CoreDNS ye;
  • gerr: Rêya lêgerînê ji bo domanek taybetî diyar dike. Balkêş e ku google.com an mrkaran.dev FQDN ne (navên domain bi temamî kalîfîye). Li gorî peymana standard ku piraniya çareserkerên DNS dişopînin, tenê yên ku bi xala "."-ê bi dawî dibin, ku qada root temsîl dikin, domainên bi tevahî jêhatî (FDQN) têne hesibandin. Hin çareserker dikarin xwe xalek zêde bikin. Ji ber vê yekê, mrkaran.dev. navê domainê bi tevahî jêhatî ye (FQDN), û mrkaran.dev - Na;
  • xalên: Parametreya herî balkêş (ev gotar li ser wê ye). ndots Berî ku ew wekî navek domainê "bi tevahî jêhatî" were hesibandin, di navek daxwazek de hejmara bendavên xalan diyar dike. Dema ku em rêzika lêgerîna DNS analîz bikin em ê li ser vê yekê paşê bêtir biaxivin.

Lêgerîna DNS li Kubernetes

Werin em bibînin ka çi dibe dema ku em bipirsin mrkaran.dev di 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

Ji bo vê ceribandinê, min asta têketina CoreDNS destnîşan kir all (ku ew pir biwêj dike). Ka em li têketinên podê binêrin 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

Phew. Li vir du tişt bala we dikişînin:

  • Daxwaz di hemî qonaxên lêgerînê re derbas dibe heya ku bersiv kodê dihewîne NOERROR (Xerîdarên DNS wê fêm dikin û wekî encam hilînin). NXDOMAIN tê wê wateyê ku tu tomar ji bo navê domainê nehatiye dîtin. Ji ber ku mrkaran.dev ne navek FQDN e (li gorî ndots=5), çareserker li riya lêgerînê dinêre û rêza daxwazan destnîşan dike;
  • qeydên А и АААА di paralel de hatin. Rastî ev e ku daxwazên yek-car in /etc/resolv.conf Bi xwerû, ew bi vî rengî têne mîheng kirin ku lêgerînên paralel bi karanîna protokolên IPv4 û IPv6 têne kirin. Hûn dikarin vê tevgerê bi lêzêdekirina vebijarkê betal bikin single-request в resolv.conf.

Têbînî: glibc dikare were mîheng kirin ku van daxwazan bi dû hev bişîne, û musl - na, ji ber vê yekê bikarhênerên Alpine divê baldar bin.

Ceribandina bi xalan

Werin em hinekî zêdetir biceribînin ndots û em bibînin ka ev parametre çawa tevdigere. Fikir hêsan e: ndots diyar dike ka xerîdar DNS dê domainê wekî bêkêmasî an têkildar binirxîne. Mînakî, di mijara xerîdarek DNS ya google-ê ya hêsan de, ew çawa dizane gelo ev domain mutleq e? Ger hûn saz bikin ndots wekhev 1, xerîdar dê bêje: "Oh, hundur google yek xal tune ye; Ez texmîn dikim ku ez ê di tevahiya navnîşa lêgerînê de biçim. Lêbelê, heke hûn bipirsin google.com, navnîşa paşgiran dê bi tevahî were paşguh kirin ji ber ku navê daxwazkirî bend derbas dike ndots (bi kêmanî xalek heye).

Ka em ji vê yekê piştrast bin:

$ 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

Têketinên 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

Ji ber ku di mrkaran yek xalek tune ye, lêgerîn li seranserê navnîşa paşgiran hate kirin.

Nîşe: di pratîkê de nirxa herî zêde ndots bi sînorkirî 15; ji hêla xwerû ve di Kubernetes de ew 5 e.

Serlêdan di hilberînê de

Ger serîlêdanek gelek bangên torê yên derveyî dike, DNS dikare di bûyera seyrûsefera çalak de bibe astengek, ji ber ku çareseriya navî gelek pirsên nehewce dike (berî ku pergal bigihîje ya rast). Serlêdan bi gelemperî herêmek root li navên domainê zêde nakin, lê ev wekî hackek xuya dike. Yanî li şûna ku bipirse api.twitter.com, hûn dikarin koda hişk bikin api.twitter.com. (bi xalek) di serîlêdanê de, ku dê ji xerîdarên DNS-ê bihêle ku rasterast li ser qada mutleq lêgerînên rayedar bikin.

Wekî din, bi guhertoya Kubernetes 1.14, pêvekirin dest pê dike dnsConfig и dnsPolicy statûya stabîl wergirtiye. Ji ber vê yekê, dema ku podek bi cîh bikin, hûn dikarin nirxê kêm bikin ndots, bêje, heta 3 (û heta 1 jî!). Ji ber vê yekê, her peyamek di nav girêkek de dê pêdivî ye ku domaina tevahî tê de hebe. Dema ku hûn neçar in ku di navbera performans û veguheztinê de hilbijêrin, ev yek ji bazirganiya klasîk e. Ji min re dixuye ku divê hûn tenê ji vê yekê bitirsin ger derengiya ultra-kêm ji serîlêdana we re girîng e, ji ber ku encamên DNS jî di hundurê de têne cache kirin.

references

Ez pêşî li ser vê taybetmendiyê fêr bûm K8s-hevdîtin, di 25ê Çile de pêk hat. Li ser vê pirsgirêkê, di nav tiştên din de nîqaş hatin kirin.

Li vir çend girêdan hene ji bo lêgerîna bêtir:

  • Daxûyanî, çima di Kubernetes de ndots=5;
  • Tiştên mezin guheztina dots çawa bandorê li performansa serîlêdanê dike;
  • Nakokîyên di navbera çareserkerên musl û glibc de.

Nîşe: Min hilbijart ku ez bikar nekim dig di vê gotarê de. dig bixweber xalek (nasnameya qada root) lê zêde dike, domainê dike "bi tevahî jêhatî" (FQDN), ne pêşî ew di navnîşa lêgerînê de dimeşîne. Li ser vê yekê nivîsand yek ji weşanên berê. Lêbelê, pir ecêb e ku, bi gelemperî, ji bo tevgera standard divê alek veqetandî were destnîşankirin.

DNSing pîroz be! Paşê ezê te bibînim!

PS ji wergêr

Li ser bloga me jî bixwînin:

Source: www.habr.com

Add a comment