/etc/resolv.conf Kubernetes podiem, ndots:5 opcija, kā tas var negatīvi ietekmēt lietojumprogrammu veiktspēju

/etc/resolv.conf Kubernetes podiem, ndots:5 opcija, kā tas var negatīvi ietekmēt lietojumprogrammu veiktspēju

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 runāja, 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:5

Kā redzat, ir trīs direktīvas:

  1. Nosaukuma serveris ir pakalpojuma IP kube-dns
  2. NorādÄ«ti 4 vietējās meklēŔanas domēni search
  3. 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.

/etc/resolv.conf Kubernetes podiem, ndots:5 opcija, kā tas var negatīvi ietekmēt lietojumprogrammu veiktspēju

Å 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):

/etc/resolv.conf Kubernetes podiem, ndots:5 opcija, kā tas var negatīvi ietekmēt lietojumprogrammu veiktspēju

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