DNS-otsing Kuberneteses

MĂ€rk. tĂ”lge.: DNS probleem Kubernetesis, tĂ€psemalt — parameetri seadistamine ndots, — ĂŒllatavalt populaarne, ja juba ei ole esimene aasta. JĂ€rjekordses sellele teemal kirjutises rÀÀgib autor — DevOps-insener suurest maaklerifirmast Indias — vĂ€ga lihtsal ja lakoonilisel viisil, millest on kasu kolleegidele, kes kasutavad Kubernetes’t.

DNS-otsing Kuberneteses

Üks peamisi eeliseid rakenduste juurutamisel Kuberneteses on probleemivaba rakenduste avastamine. Siseriiklike suhtlemine muutub oluliselt lihtsamaks teenuse (Teenused), mis on virtuaalne IP, toetav pod’ide IP-aadresside kogumit. NĂ€iteks, kui teenus vanilla tahab suhelda teenusega chocolate, saab ta otse pöörduda virtuaalse IP poole chocolate. Tekib kĂŒsimus: kes sel juhul lahendab DNS-pĂ€ringu chocolate ja kuidas?

DNS-nimede lahendamine seadistatakse Kubernetes klastris lĂ€bi CoreDNS. Kubelet kirjutab pod’i CoreDNS nime serverina kĂ”ikide pod’ide failidesse /etc/resolv.conf . Kui vaadata mis tahes 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

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

See konfiguratsioon on DNS-kliendi jaoks, et suunata pÀringud DNS-serverisse. Failis resolv.conf on jÀrgmine teave:

  • nameserver: server, kuhu DNS-pĂ€ringud suunatakse. Meie puhul on see CoreDNS teenuse aadress;
  • search: mÀÀrab konkreetse domeeni otsingutee. Huvi pĂ€rast google.com vĂ”i mrkaran.dev ei ole FQDN (tĂ€ielikud domeeninimesid). Vastavalt enamik DNS-resolvery peetavatele standarditele loetakse tĂ€ielikeks (FDQN) domeenideks vaid need, mis lĂ”pevad punktiga „.“, mis tĂ€histab juureala. MĂ”ned resolver'id suudavad punkti automaatselt lisada. Seega, mrkaran.dev. — on tĂ€ielik domeeninimi (FQDN), kuid mrkaran.dev — ei ole;
  • ndots: kĂ”ige huvitavam parameeter (see artikkel kĂ€sitleb just seda). ndots mÀÀrab ÀÀrepunktide arvu nime pĂ€ringus, mille saavutamisel loetakse see „tĂ€ielikuks” domeeninimeks. RÀÀgime sellest hiljem, kui analĂŒĂŒsime DNS-otsingu jĂ€rjekorda.

DNS-otsing Kuberneteses

Vaadakem, mis juhtub, kui me pÀrime mrkaran.dev pod's:

$ 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

KĂ€esoleva eksperimendi jaoks seadsin CoreDNS logimise taseme 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

Huh. Siin köidavad tÀhelepanu kaks asja:

  • PĂ€ring lĂ€bib kĂ”ik otsinguetapid, kuni vastus sisaldab koodi NOERROR (DNS-kliendid mĂ”istavad seda ja sĂ€ilitavad tulemuseks). NXDOMAIN tĂ€hendab, et antud domeeninime kohta pole kirjet leitud. Kuna mrkaran.dev ei ole FQDN-nimi (vastavalt ndots=5), resolver vaatab otsinguteed ja mÀÀrab pĂ€ringute jĂ€rjekorra;
  • Kirjed A ja AAAA tulevad paralleelselt. Asi on selles, et korduvad pĂ€ringud on /etc/resolv.conf vaikimisi seadistatud nii, et tehakse paralleelne otsing nii IPv4 kui ka IPv6 protokollide kaudu. Seda kĂ€itumist saab tĂŒhistada, lisades valiku single-request ĂŒhes resolv.conf.

MĂ€rkus: glibc vĂ”ib seada nende pĂ€ringute jĂ€rjestikuseks saatmiseks, musl — ei, se tĂ€hendab, et Alpine'i kasutajad peaksid seda meeles pidama.

Katsume ndotseiga

Teeme veel mĂ”ned katsetused 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 teada, kas see domeen on absoluutne? Kui seadistada ndots vÀÀrtuseks 1, ĂŒtleb klient: „Oh, siin google pole ĂŒhtki punkti; vĂ”ib-olla lĂ€hen kogu otsingulisti ĂŒle.” Kui aga kĂŒsida google.com, siis suffixide nimekiri jĂ€etakse tĂ€ielikult tĂ€helepanuta, kuna kĂŒsitud nimi rahuldab kĂŒnnise ndots (kui on vĂ€hemalt ĂŒks punkt).

Kinnitage see:

$ cat /etc/resolv.conf
options ndots:1
$ nslookup mrkaran
Server: 10.152.183.10
Address: 10.152.183.10#53

** server ei suuda leida 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 pole ĂŒhtki punkti, otsing tehti kogu suffixide nimekirja pĂ”hjal.

MÀrkus: praktikas maksimaalne vÀÀrtus ndots piiratud 15; vaikimisi Kubernetesis on see 5.

Kasutamine tootmises

Kui rakendus teeb palju vĂ€liseid vĂ”rguvĂ€ljakutseid, vĂ”ib DNS olla kitsaskohaks suure liikluse korral, kuna nime lahendamisel tehakse mitmeid tarbetuid pĂ€ringuid (enne kui sĂŒsteem leiab vajaliku). Rakendused ei lisanud tavaliselt juurezonaid domeeninimedele, kuid see on ĂŒsna toimiv lahendus. See tĂ€hendab, et selle asemel, et kĂŒsida api.twitter.com, vĂ”ite 'hardcode'ida api.twitter.com. (punktiga) rakendusse, mis sunnib DNS-kliente tegema autoriteetset otsingut otse absoluutsele domeenile.

Lisaks on alates Kubernetes 1.14 versioonist laiendused dnsConfig ja dnsPolicy saanud stabiilsuse staatuse. Seega saab pod'i juurutamisel vÀÀrtust vĂ€hendada. ndots, ĂŒtleme, kuni 3 (ja isegi kuni 1!). Selle tĂ”ttu peab iga sĂ”num sĂ”lmes sisaldama tĂ€ielikku domeeni. See on ĂŒks klassikalisi kompromisse, millega peab valima jĂ”udluse ja ĂŒlekantavuse vahel. Arvan, et selle ĂŒle tasub muretseda ainult juhul, kui ÀÀrmiselt madalad latentsused on teie rakenduse jaoks eluliselt olulised, kuna DNS-i tulemused ka vahemĂ€lus.

Lingid

Selle omaduse kohta sain esmakordselt teada K8s-meetupil, mis toimus 25. jaanuaril. Seal rÀÀgiti ka sellest probleemist.

Siin on mÔned lingid edasiseks uurimiseks:

MĂ€rkus: eelistasin mitte kasutada dig selles artiklis. dig automaatne punkt (juurkonna identifikaator), muutes domeeni „tĂ€ielikuks” (FQDN), ei lĂ€bi otsinguloendi. Kirjutasin sellest ĂŒhes varasemas vĂ€ljaandes. TĂ”epoolest, on ĂŒsna ĂŒllatav, et ĂŒldise kĂ€itumise saavutamiseks tuleb seada eraldi lipuke.

Headjat DNS’ing! Kohtumiseni!

P.S. tÔlkija mÀrkused

Lugege ka meie blogist:

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster