ДНС претрага у Кубернетесу

Белешка. трансл.: ДНС проблем у Кубернетесу, тачније, подешавања параметара ndots, је изненађујуће популаран, и већ Не први година. У другој белешци о овој теми, њен аутор, ДевОпс инжењер из велике брокерске компаније у Индији, говори на веома једноставан и концизан начин о томе шта је корисно да знају колеге које користе Кубернетес.

ДНС претрага у Кубернетесу

Једна од главних предности примене апликација на Кубернетес-у је беспрекорно откривање апликација. Интеракција унутар кластера је знатно поједностављена захваљујући концепту услуге (сервис), што је виртуелна ИП адреса која подржава скуп ИП адреса под. На пример, ако услуга vanilla жели да контактира сервис chocolate, може директно приступити виртуелној ИП адреси за chocolate. Поставља се питање коме ће у овом случају ДНС-ов захтјев рјешавати chocolate И како?

Резолуција ДНС имена је конфигурисана на Кубернетес кластеру помоћу ЦореДНС. Кубелет региструје под са ЦореДНС као сервер имена у датотекама /etc/resolv.conf све махуне. Ако погледате садржај /etc/resolv.conf било који под, изгледаће отприлике овако:

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

Ову конфигурацију користе ДНС клијенти за прослеђивање захтева ДНС серверу. У фајлу resolv.conf садржи следеће информације:

  • намесервер: сервер на који ће се слати ДНС захтеви. У нашем случају, ово је адреса услуге ЦореДНС;
  • претраживање: Дефинише путању претраге за одређени домен. Занимљиво је то google.com или mrkaran.dev нису ФКДН (потпуно квалификована имена домена). Према стандардној конвенцији коју прати већина ДНС разрешивача, само они који се завршавају тачком „.“, која представља коренску зону, сматрају се потпуно квалификованим (ФДКН) доменима. Неки решавачи могу сами да додају тачку. Тако, mrkaran.dev. је потпуно квалификовано име домена (ФКДН), и mrkaran.dev - Не;
  • ндотс: Најинтересантнији параметар (овај чланак је о томе). ndots специфицира гранични број тачака у имену захтева пре него што се сматра „потпуно квалификованим“ именом домена. О томе ћемо више говорити касније када анализирамо секвенцу ДНС претраживања.

ДНС претрага у Кубернетесу

Да видимо шта се дешава када питамо mrkaran.dev у под:

$ 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

За овај експеримент, поставио сам ЦореДНС ниво евидентирања на all (што га чини прилично опширним). Хајде да погледамо дневнике махуна 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

Фуј. Две ствари овде привлаче вашу пажњу:

  • Захтев пролази кроз све фазе претраге док одговор не садржи код NOERROR (ДНС клијенти то разумеју и као резултат чувају). NXDOMAIN значи да није пронађен ниједан запис за дато име домена. Због mrkaran.dev није ФКДН име (према ndots=5), разрешивач гледа на путању претраге и одређује редослед захтева;
  • Уноси А и АААА стижу паралелно. Чињеница је да једнократни захтеви у /etc/resolv.conf Подразумевано, они су конфигурисани на такав начин да се паралелне претраге врше коришћењем ИПв4 и ИПв6 протокола. Ово понашање можете отказати додавањем опције single-request в resolv.conf.

Напомена: glibc може се конфигурисати за слање ових захтева узастопно, и musl - не, тако да корисници Алпине-а требају узети у обзир.

Експериментисање са тачкама

Хајде да експериментишемо још мало са ndots и да видимо како се овај параметар понаша. Идеја је једноставна: ndots одређује да ли ће ДНС клијент третирати домен као апсолутан или релативан. На пример, у случају једноставног Гоогле ДНС клијента, како он зна да ли је овај домен апсолутан? Ако поставите ndots једнак 1, клијент ће рећи: „Ох, ин google нема ни једне тачке; Претпостављам да ћу проћи кроз целу листу за претрагу." Међутим, ако питате google.com, листа суфикса ће бити потпуно занемарена јер тражено име испуњава праг ndots (постоји бар једна тачка).

Хајде да се уверимо у ово:

$ 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

ЦореДНС евиденције:

[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

Од у mrkaran нема ни једне тачке, претрага је обављена по целој листи суфикса.

Напомена: у пракси максимална вредност ndots ограничено на 15; подразумевано у Кубернетесу је 5.

Примена у производњи

Ако апликација упућује много спољних мрежних позива, ДНС може постати уско грло у случају активног саобраћаја, пошто резолуција имена чини много непотребних упита (пре него што систем дође до правог). Апликације обично не додају роот зону именима домена, али ово звучи као хак. Односно, уместо да питам api.twitter.com, можете га 'чврсто кодирати' api.twitter.com. (са тачком) у апликацији, што ће подстаћи ДНС клијенте да изврше ауторитативне претраге директно на апсолутном домену.

Поред тога, почевши од Кубернетес верзије 1.14, проширења dnsConfig и dnsPolicy добио стабилан статус. Стога, када постављате под, можете смањити вредност ndots, рецимо, до 3 (па чак и до 1!). Због тога ће свака порука унутар чвора морати да садржи цео домен. Ово је један од класичних компромиса када морате да бирате између перформанси и преносивости. Чини ми се да би требало да бринете о овоме само ако је ултра-ниско кашњење од виталног значаја за вашу апликацију, пошто се ДНС резултати такође интерно кешују.

референце

Први пут сам сазнао за ову функцију на К8с-меетуп, одржаној 25. јануара. О овом проблему се, између осталог, разговарало.

Ево неколико линкова за даље истраживање:

Напомена: Одлучио сам да не користим dig у овом чланку. dig аутоматски додаје тачку (идентификатор коренске зоне), чинећи домен „потпуно квалификованим“ (ФКДН), не тако што ћете га прво проћи кроз листу за претрагу. О овоме је писао у једна од претходних публикација. Међутим, прилично је изненађујуће да, генерално, посебна заставица мора бити специфицирана за стандардно понашање.

Срећан ДНСинг! Видимо се касније!

ПС од преводиоца

Прочитајте и на нашем блогу:

Извор: ввв.хабр.цом

Додај коментар