Ҷустуҷӯи DNS дар Кубернетес

Шарҳ. тарҷума.: Мушкилоти DNS дар Kubernetes, ё дақиқтараш, танзимоти параметр ndots, тааҷубовар маъмул аст, ва аллакай На аввал сол. Дар ёддошти дигар дар ин мавзӯъ, муаллифи он, муҳандиси DevOps аз як ширкати бузурги брокерӣ дар Ҳиндустон, хеле содда ва мухтасар дар бораи он ки барои ҳамкасбони Kubernetes корбарон муфид аст, сӯҳбат мекунад.

Ҷустуҷӯи DNS дар Кубернетес

Яке аз бартариҳои асосии ҷойгиркунии барномаҳо дар Kubernetes кашфи бефосилаи барномаҳо мебошад. Ҳамкории дохили кластер ба шарофати консепсияи хидмат хеле содда карда шудааст (хизматрасонӣ), ки IP виртуалӣ мебошад, ки маҷмӯи суроғаҳои IP-ро дастгирӣ мекунад. Масалан, агар хидмат vanilla мехоҳад бо хидмат тамос гирад chocolate, он метавонад мустақиман ба IP виртуалӣ дастрасӣ пайдо кунад chocolate. Саволе ба миён меояд: дар ин ҳолат дархости DNS-ро кӣ ҳал мекунад chocolate Ва чӣ тавр?

Ҳалли номи DNS бо истифода аз кластери Kubernetes танзим карда мешавад CoreDNS. Kubelet як подкастро бо CoreDNS ҳамчун сервери ном дар файлҳо сабт мекунад /etc/resolv.conf ҳама гулҳо. Агар ба мазмун назар андозед /etc/resolv.conf ҳама гуна подкаст, он чунин хоҳад буд:

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

Ин конфигуратсияро муштариёни DNS барои ирсоли дархостҳо ба сервери DNS истифода мебаранд. Дар файл resolv.conf дорои маълумоти зерин:

  • сервери ном: сервере, ки дархостҳои DNS ба он фиристода мешаванд. Дар ҳолати мо, ин суроғаи хидмати CoreDNS аст;
  • кофтуков: Роҳи ҷустуҷӯро барои домени мушаххас муайян мекунад. Ҷолиб он аст, ки google.com ё mrkaran.dev FQDN нестанд (номҳои домении пурраи тахассусӣ). Тибқи конвенсияи стандартие, ки аксари ҳалли DNS риоя мекунанд, танҳо онҳое, ки бо нуқта "." хотима меёбанд, доменҳои пурраи тахассусӣ (FDQN) ҳисобида мешаванд. Баъзе ҳалкунандаҳо метавонанд худашон нуқта илова кунанд. Ҳамин тариқ, mrkaran.dev. номи домени пурра соҳибихтисос аст (FQDN), ва mrkaran.dev - Не;
  • ндотс: Параметри ҷолибтарин (ин мақола дар бораи он аст). ndots шумораи ҳадди ниҳоии номи дархостро пеш аз он ки номи домени "комилан мувофиқ" ҳисобида шавад, муайян мекунад. Мо дар ин бора баъдтар ҳангоми таҳлили пайдарпайии ҷустуҷӯи DNS сӯҳбат хоҳем кард.

Ҷустуҷӯи DNS дар Кубернетес

Биёед бубинем, ки вақте ки мо мепурсем, чӣ мешавад 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

Барои ин озмоиш, ман сатҳи сабти CoreDNS-ро муқаррар кардам 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 (Муштариён DNS онро мефаҳманд ва дар натиҷа нигоҳ медоранд). NXDOMAIN маънои онро дорад, ки ягон сабт барои номи домени додашуда ёфт нашуд. Зеро ки mrkaran.dev номи FQDN нест (мувофиқи ndots=5), ҳалкунанда ба роҳи ҷустуҷӯ назар мекунад ва тартиби дархостҳоро муайян мекунад;
  • Сабтҳо А и АААА дар баробари омадан. Гап дар сари он аст, ки дархостхои якдафъаина дар /etc/resolv.conf Бо нобаёнӣ, онҳо тавре танзим карда мешаванд, ки ҷустуҷӯҳои мувозӣ бо истифода аз протоколҳои IPv4 ва IPv6 анҷом дода шаванд. Шумо метавонед ин рафторро бо илова кардани хосият бекор кунед single-request в resolv.conf.

Эзоҳ: glibc мумкин аст барои фиристодани ин дархостҳо пай дар пай танзим карда мешавад, ва musl - не, аз ин рӯ, корбарони кӯҳҳои кӯҳӣ бояд ба назар гиранд.

Таҷриба бо ndots

Биёед каме бештар таҷриба кунем ndots ва биёед бубинем, ки ин параметр чӣ гуна рафтор мекунад. Идея оддӣ аст: ndots муайян мекунад, ки муштарии DNS ба домен ҳамчун мутлақ ё нисбӣ муносибат мекунад. Масалан, дар мавриди муштарии оддии Google DNS, он чӣ гуна медонад, ки ин домен мутлақ аст? Агар шумо муқаррар кунед 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

Сабтҳои 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

Аз соли mrkaran як нукта нест, кофтуков дар тамоми руйхати суффиксхо гузаронда шуд.

Эзоҳ: дар амал арзиши максималӣ ndots маҳдуд ба 15; ба таври нобаёнӣ дар Kubernetes он 5 аст.

Истифодаи дар истеҳсолот

Агар барнома зангҳои зиёди шабакаи беруна кунад, DNS дар ҳолати трафики фаъол метавонад монеа гардад, зеро ҳалли ном дархостҳои зиёди нолозимро ба бор меорад (пеш аз он ки система ба рост ворид шавад). Барномаҳо одатан ба номҳои доменҳо минтақаи реша илова намекунанд, аммо ин ба ҳак монанд аст. Яъне ба ҷои пурсидан api.twitter.com, шумо метавонед онро "коди сахт" кунед api.twitter.com. (бо нуқта) дар барнома, ки муштариёни DNS-ро водор мекунад, ки мустақиман дар домени мутлақ ҷустуҷӯҳои бонуфузро анҷом диҳанд.

Илова бар ин, аз версияи Kubernetes 1.14 сар карда, васеъшавӣ dnsConfig и dnsPolicy вазъияти устувор гирифт. Ҳамин тариқ, ҳангоми ҷойгиркунии pod, шумо метавонед арзишро кам кунед ndots, бигӯед, то 3 (ва ҳатто то 1!). Аз ин сабаб, ҳар як паём дар дохили гиреҳ бояд домени пурраро дар бар гирад. Ин яке аз муомилоти классикӣ аст, вақте ки шумо бояд байни иҷроиш ва қобили интиқол интихоб кунед. Ба назари ман, шумо бояд танҳо дар ин бора хавотир шавед, агар таъхири ултра паст барои барномаи шумо муҳим бошад, зеро натиҷаҳои DNS инчунин дар дохили он кэш карда мешаванд.

мурожиат

Ман аввал дар бораи ин хусусият дар бораи фаҳмидам K8s - вохӯрӣ, 25 январь барпо гардид. Дар бораи ин проблема, аз чумла дигар масъалахо мухокима карда шуд.

Инҳоянд чанд истинодҳо барои таҳқиқоти минбаъда:

  • Шарҳ, чаро ndots = 5 дар Кубернетес;
  • Чизи олӣ чӣ гуна тағир додани ndots ба иҷрои барнома таъсир мерасонад;
  • Нишондиҳандаҳо байни резолюторҳои musl ва glibc.

Эзоҳ: Ман интихоб кардам, ки истифода накунам dig дар ин мақола. dig ба таври худкор нуқта (идентификатори минтақаи решавӣ) илова мекунад, ки доменро "комилан соҳибихтисос" мекунад (FQDN), не аввал онро тавассути рӯйхати ҷустуҷӯ иҷро кунед. Дар ин бора навиштааст яке аз нашрияҳои қаблӣ. Аммо, хеле тааҷҷубовар аст, ки дар маҷмӯъ, барои рафтори стандартӣ парчами алоҳида бояд муайян карда шавад.

DNSing муборак! То дидор!

PS аз тарҷумон

Инчунин дар блоги мо хонед:

Манбаъ: will.com

Илова Эзоҳ