
MÄs nesen palaižÄm Kubernetes 1.9 AWS, izmantojot Kops. Vakar, nevainojami ievieÅ”ot jaunu trafiku lielÄkajiem mÅ«su Kubernetes klasteriem, es sÄku pamanÄ«t neparastas DNS nosaukuma izŔķirtspÄjas kļūdas, ko reÄ£istrÄjusi mÅ«su lietojumprogramma.
GitHub par to ir diezgan daudz , tÄpÄc arÄ« es nolÄmu to izdomÄt. BeigÄs sapratu, ka mÅ«su gadÄ«jumÄ to izraisa palielinÄtÄ slodze kube-dns Šø dnsmasq. Pats interesantÄkais un jaunums man bija iemesls ievÄrojamam DNS pieprasÄ«jumu trafika pieaugumam. Mans ieraksts ir par to un ko ar to darÄ«t.
DNS izŔķirtspÄju konteinera iekÅ”pusÄ - tÄpat kÄ jebkurÄ Linux sistÄmÄ - nosaka konfigurÄcijas fails /etc/resolv.conf. NoklusÄjuma Kubernetes dnsPolicy Å”is ClusterFirst, kas nozÄ«mÄ, ka jebkurÅ” DNS pieprasÄ«jums tiks pÄrsÅ«tÄ«ts uz dnsmasq, darbojas podÄ kube-dns klasterÄ«, kas savukÄrt pÄrsÅ«tÄ«s pieprasÄ«jumu lietojumprogrammai kube-dns, ja nosaukums beidzas ar klastera sufiksu, vai, pretÄjÄ gadÄ«jumÄ, uz augstÄka lÄ«meÅa DNS serveri.
fails /etc/resolv.conf katrÄ konteinerÄ pÄc noklusÄjuma izskatÄ«sies Å”Ädi:
nameserver 100.64.0.10
search namespace.svc.cluster.local svc.cluster.local cluster.local
eu-west-1.compute.internal
options ndots:5KÄ redzat, ir trÄ«s direktÄ«vas:
- Nosaukuma serveris ir pakalpojuma IP
kube-dns - NorÄdÄ«ti 4 vietÄjÄs meklÄÅ”anas domÄni
search - Ir iespÄja
ndots:5
InteresantÄ Å”Ä«s konfigurÄcijas daļa ir vietÄjÄs meklÄÅ”anas domÄni un iestatÄ«jumi ndots:5 sanÄk kopÄ. Lai to saprastu, jums ir jÄsaprot, kÄ darbojas DNS atrisinÄÅ”ana nekvalificÄtiem nosaukumiem.
Kas ir pilns vÄrds?
PilnÄ«bÄ kvalificÄts nosaukums ir nosaukums, kuram netiks veikta vietÄja uzmeklÄÅ”ana, un nosaukums tiks uzskatÄ«ts par absolÅ«tu nosaukuma noteikÅ”anas laikÄ. PÄc vienoÅ”anÄs DNS programmatÅ«ra uzskata nosaukumu par pilnÄ«bÄ kvalificÄtu, ja tas beidzas ar punktu (.), un citÄdi nav pilnÄ«bÄ kvalificÄts. Tas ir google.com. pilnÄ«bÄ definÄts un google.com - NÄ.
KÄ tiek apstrÄdÄts nekvalificÄts vÄrds?
Kad lietojumprogramma izveido savienojumu ar nosaukumÄ norÄdÄ«to attÄlo resursdatoru, DNS nosaukuma atrisinÄÅ”ana parasti tiek veikta, izmantojot sistÄmas zvanu, piemÄram, getaddrinfo(). Bet, ja nosaukums ir nekvalificÄts (nebeidzas ar .), es domÄju, vai sistÄmas izsaukums vispirms mÄÄ£inÄs atrisinÄt nosaukumu kÄ absolÅ«tu nosaukumu vai vispirms iziet cauri vietÄjÄs meklÄÅ”anas domÄniem? Tas ir atkarÄ«gs no opcijas ndots.
No rokasgrÄmatas resolv.conf:
ndots:n
ŃŃŃŠ°Š½Š°Š²Š»ŠøŠ²Š°ŠµŃ ŠæŠ¾ŃŠ¾Š³ Š“Š»Ń ŠŗŠ¾Š»ŠøŃŠµŃŃŠ²Š° ŃŠ¾Ńек, ŠŗŠ¾ŃŠ¾ŃŃŠµ Š“Š¾Š»Š¶Š½Ń ŠæŠ¾ŃŠ²ŠøŃŃŃŃ Š² имени, ŠæŃŠµŠ¶Š“е ŃŠµŠ¼ Š±ŃŠ“ŠµŃ ŃŠ“елан Š½Š°ŃŠ°Š»ŃŠ½Ńй Š°Š±ŃолŃŃŠ½Ńй Š·Š°ŠæŃоŃ. ŠŠ½Š°Ńение по ŃŠ¼Š¾Š»ŃŠ°Š½ŠøŃ Š“Š»Ń n ŃŠ°Š²Š½Š¾ 1, ŃŃŠ¾ Š¾Š·Š½Š°ŃŠ°ŠµŃ, ŃŃŠ¾ ŠµŃŠ»Šø в имени еŃŃŃ ŠŗŠ°ŠŗŠøŠµ-либо ŃŠ¾ŃŠŗŠø, ŠøŠ¼Ń Š±ŃŠ“ŠµŃ ŃŠ½Š°Ńала Š¾ŠæŃобовано как Š°Š±ŃолŃŃŠ½Š¾Šµ имŃ, ŠæŃŠµŠ¶Š“е ŃŠµŠ¼ Šŗ Š½ŠµŠ¼Ń Š±ŃŠ“ŃŃ Š“Š¾Š±Š°Š²Š»ŠµŠ½Ń ŠŗŠ°ŠŗŠøŠµ-либо ŃŠ»ŠµŠ¼ŠµŠ½ŃŃ ŃŠæŠøŃŠŗŠ° ŠæŠ¾ŠøŃŠŗŠ°.Tas nozÄ«mÄ, ka, ja par ndots Ja vÄrtÄ«ba ir 5 un nosaukumÄ ir mazÄk par 5 punktiem, sistÄmas izsaukums mÄÄ£inÄs to atrisinÄt secÄ«gi, vispirms ŔķÄrsojot visus lokÄlÄs meklÄÅ”anas domÄnus un, ja tas neizdosies, galu galÄ atrisinot to kÄ absolÅ«tu nosaukumu.
KÄpÄc tÄ ndots:5 vai tas varÄtu negatÄ«vi ietekmÄt lietojumprogrammas veiktspÄju?
KÄ jÅ«s varat iedomÄties, ja jÅ«su lietojumprogramma izmanto daudz ÄrÄjÄs trafika, katram izveidotajam TCP savienojumam (vai, precÄ«zÄk, katram atrisinÄtajam nosaukumam), tÄ izdos 5 DNS vaicÄjumus, pirms nosaukums tiks pareizi atrisinÄts, jo vispirms tiks veikts. 4 vietÄjÄs meklÄÅ”anas domÄns, un beigÄs izdos absolÅ«tu vÄrda izŔķirtspÄjas pieprasÄ«jumu.
TÄlÄk esoÅ”ajÄ diagrammÄ ir parÄdÄ«ta mÅ«su 3 kube-dns moduļu kopÄjÄ trafika pirms un pÄc dažu mÅ«su lietojumprogrammÄ konfigurÄto saimniekdatoru nosaukumu pÄrslÄgÅ”anas uz pilnÄ«bÄ kvalificÄtiem.

Å ajÄ diagrammÄ parÄdÄ«ts lietojumprogrammas latentums pirms un pÄc tam, kad mÄs pÄrslÄdzÄm vairÄkus mÅ«su lietojumprogrammÄ konfigurÄtos saimniekdatoru nosaukumus uz pilniem nosaukumiem (vertikÄlÄ zilÄ lÄ«nija ir izvietoÅ”ana):

1. risinÄjums ā izmantojiet pilnÄ«bÄ kvalificÄtus nosaukumus
Ja jums ir maz statisku ÄrÄjo nosaukumu (t.i., definÄti lietojumprogrammas konfigurÄcijÄ), kuriem izveidojat lielu skaitu savienojumu, iespÄjams, vienkÄrÅ”Äkais risinÄjums ir pÄrslÄgt tos uz pilnÄ«bÄ kvalificÄtiem, vienkÄrÅ”i pievienojot tos. beigÄs.
Tas nav galÄ«gs risinÄjums, taÄu palÄ«dz Ätri, lai arÄ« ne tÄ«ri, uzlabot situÄciju. MÄs izmantojÄm Å”o ielÄpu, lai atrisinÄtu problÄmu, kuras rezultÄti tika parÄdÄ«ti iepriekÅ” redzamajos ekrÄnuzÅÄmumos.
RisinÄjums #2 - pielÄgoÅ”ana ndots в dnsConfig
OperÄtÄjsistÄmÄ Kubernetes 1.9 funkcionalitÄte parÄdÄ«jÄs alfa režīmÄ (beta versija v1.10), kas ļauj labÄk kontrolÄt DNS parametrus, izmantojot pod rekvizÄ«tu dnsConfig. Cita starpÄ tas ļauj konfigurÄt vÄrtÄ«bu ndots konkrÄtam podam, t.i.
apiVersion: v1
kind: Pod
metadata:
namespace: default
name: dns-example
spec:
containers:
- name: test
image: nginx
dnsConfig:
options:
- name: ndots
value: "1"avoti
Lasiet arÄ« citus rakstus mÅ«su emuÄrÄ:
Avots: www.habr.com
