Recherche DNS nan Kubernetes

Remak. trad.: DNS pwoblèm nan Kubernetes, oswa plis jisteman, paramèt paramèt ndots, se etonan popilè, e deja Pa premye ane. Nan yon lòt nòt sou sijè sa a, otè li a, yon enjenyè DevOps ki soti nan yon gwo konpayi Brokerage nan peyi Zend, pale nan yon fason trè senp ak kout sou sa ki itil pou kòlèg k ap opere Kubernetes konnen.

Recherche DNS nan Kubernetes

Youn nan avantaj prensipal yo nan deplwaye aplikasyon sou Kubernetes se dekouvèt aplikasyon san pwoblèm. Entèraksyon nan gwoup la senplifye anpil gras a konsèp sèvis la (Lapòs), ki se yon IP vityèl ki sipòte yon seri adrès IP gous. Pou egzanp, si sèvis la vanilla vle kontakte sèvis la chocolate, li ka dirèkteman jwenn aksè nan IP vityèl la pou chocolate. Kesyon an rive: ki moun ki nan ka sa a pral rezoud demann DNS la chocolate Ak ki jan?

Se rezolisyon non DNS configuré sou yon gwoup Kubernetes lè l sèvi avèk CoreDNS. Kubelet anrejistre yon gous ak CoreDNS kòm yon sèvè non nan dosye yo /etc/resolv.conf tout gous. Si w gade kontni an /etc/resolv.conf nenpòt gous, li pral gade yon bagay tankou sa a:

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

Kliyan DNS yo itilize konfigirasyon sa a pou voye demann bay sèvè DNS la. Nan dosye resolv.conf gen enfòmasyon sa yo:

  • sèvè non: sèvè kote yo pral voye demann DNS. Nan ka nou an, sa a se adrès sèvis CoreDNS la;
  • rechèch: Defini chemen rechèch la pou yon domèn espesifik. Li enteresan sa google.com oswa mrkaran.dev yo pa FQDN (non domèn konplètman kalifye). Dapre konvansyon estanda ke pifò rezolisyon DNS swiv, se sèlman moun ki fini ak yon pwen ".", ki reprezante zòn rasin lan, yo konsidere kòm domèn totalman kalifye (FDQN). Gen kèk rezolisyon ki ka ajoute yon pwen tèt yo. Kidonk, mrkaran.dev. se non domèn totalman kalifye (FQDN), epi mrkaran.dev - Non;
  • ndots: Paramèt ki pi enteresan an (atik sa a se sou li). ndots espesifye kantite papòt pwen nan yon non demann anvan li konsidere kòm yon non domèn "konplètman kalifye". Nou pral pale plis sou sa pita lè nou analize sekans rechèch DNS la.

Recherche DNS nan Kubernetes

Ann wè sa k ap pase lè nou mande mrkaran.dev nan gous:

$ 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

Pou eksperyans sa a, mwen mete nivo antre CoreDNS a all (ki fè li byen vèrbi). Ann gade mòso bwa gous la 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

Ouf. De bagay ki atire atansyon ou isit la:

  • Demann lan ale nan tout etap rechèch la jiskaske repons lan gen kòd la NOERROR (Kliyan DNS konprann li epi estoke li kòm yon rezilta). NXDOMAIN vle di ke yo pa jwenn okenn dosye pou non domèn yo bay la. Paske la mrkaran.dev se pa yon non FQDN (dapre ndots=5), rezolisyon gade chemen rechèch la epi detèmine lòd demann yo;
  • Recordings А и АААА rive nan paralèl. Reyalite a se ke yon sèl-fwa demann nan /etc/resolv.conf Pa default, yo konfigirasyon nan yon fason ke rechèch paralèl yo fèt lè l sèvi avèk pwotokòl IPv4 ak IPv6. Ou ka anile konpòtman sa a lè w ajoute opsyon an single-request в resolv.conf.

Remak: glibc ka configuré pou voye demann sa yo sekans, ak musl - non, kidonk itilizatè Alpine yo ta dwe pran nòt.

Eksperyans ak ndots

Ann fè eksperyans yon ti kras plis ak ndots epi ann wè ki jan paramèt sa a konpòte. Lide a se senp: ndots detèmine si kliyan DNS la pral trete domèn nan kòm absoli oswa relatif. Pou egzanp, nan ka a nan yon senp kliyan google DNS, ki jan li fè konnen si domèn sa a se absoli? Si ou mete ndots egal a 1, kliyan an pral di: "Oh, nan google pa gen yon sèl pwen; Mwen devine mwen pral ale nan tout lis rechèch la." Sepandan, si ou mande google.com, lis sifiks yo pral konplètman inyore paske non yo mande a satisfè papòt la ndots (gen omwen yon pwen).

Ann asire w ke sa a:

$ 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

Jounal 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

Depi nan mrkaran pa gen yon sèl pwen, rechèch la te pote soti nan tout lis la nan sifiks.

Remak: nan pratik valè a maksimòm ndots limite a 15; pa default nan Kubernetes li se 5.

Aplikasyon nan pwodiksyon an

Si yon aplikasyon fè anpil apèl rezo ekstèn, DNS ka vin yon goud nan ka trafik aktif, depi rezolisyon non fè anpil demann nesesè (anvan sistèm nan vin nan youn nan dwa). Aplikasyon anjeneral pa ajoute yon zòn rasin nan non domèn, men sa a son tankou yon Hack. Sa se, olye pou yo mande api.twitter.com, ou kapab hardcode api.twitter.com. (ak yon pwen) nan aplikasyon an, ki pral pouse kliyan DNS yo fè rechèch autorité dirèkteman sou domèn absoli.

Anplis de sa, kòmanse ak Kubernetes vèsyon 1.14, ekstansyon dnsConfig и dnsPolicy resevwa estati stab. Kidonk, lè w ap deplwaye yon gous, ou ka diminye valè a ndots, di, jiska 3 (e menm jiska 1!). Poutèt sa, chak mesaj ki nan yon ne pral gen ladann domèn konplè a. Sa a se youn nan konpwomi klasik yo lè ou gen pou chwazi ant pèfòmans ak portabilite. Li sanble mwen ke ou ta dwe sèlman enkyete sou sa a si latansi ultra-ba enpòtan anpil pou aplikasyon w lan, depi rezilta DNS yo tou nan kachèt anndan an.

Referans

Mwen te premye aprann sou karakteristik sa a sou K8s-meetup, ki te fèt 25 janvye. Se la yo te diskite, pami lòt bagay, pwoblèm sa a.

Men kèk lyen pou plis eksplorasyon:

  • Eksplikasyon, poukisa ndots=5 nan Kubernetes;
  • Gwo bagay ki jan chanje ndots afekte pèfòmans aplikasyon an;
  • Dezakò ant rezolisyon musl ak glibc.

Remak: Mwen te chwazi pa itilize dig nan atik sa a. dig otomatikman ajoute yon pwen (idantifyan zòn rasin), ki fè domèn nan "konplètman kalifye" (FQDN), pa gen okenn pa premye kouri li nan lis rechèch la. Te ekri sou sa nan youn nan piblikasyon anvan yo. Sepandan, li se byen etone ke, an jeneral, yon drapo separe dwe espesifye pou konpòtman estanda a.

Ala bon sa bon DNSing! Na wè pita!

PS soti nan tradiktè

Li tou sou blog nou an:

Sous: www.habr.com

Add nouvo kòmantè