/etc/resolv.conf kwa maganda ya Kubernetes, ndots: chaguo la 5, jinsi hii inaweza kuathiri vibaya utendakazi wa programu.

/etc/resolv.conf kwa maganda ya Kubernetes, ndots: chaguo la 5, jinsi hii inaweza kuathiri vibaya utendakazi wa programu.

Hivi majuzi tulizindua Kubernetes 1.9 kwenye AWS kwa kutumia Kops. Jana, nilipokuwa nikisambaza trafiki mpya kwa urahisi kwa kundi kubwa zaidi la Kubernetes, nilianza kugundua hitilafu zisizo za kawaida za utatuzi wa jina la DNS zilizowekwa na programu yetu.

Kuna mengi juu ya hii kwenye GitHub aliongea, kwa hivyo niliamua kufikiria pia. Mwishowe, niligundua kuwa kwa upande wetu hii inasababishwa na mzigo ulioongezeka kube-dns ΠΈ dnsmasq. Jambo la kufurahisha zaidi na jipya kwangu lilikuwa sababu ya ongezeko kubwa la trafiki ya ombi la DNS. Chapisho langu ni kuhusu hili na nini cha kufanya kuhusu hilo.

Ubora wa DNS ndani ya chombo - kama katika mfumo wowote wa Linux - huamuliwa na faili ya usanidi /etc/resolv.conf. Kubernetes Chaguomsingi dnsPolicy hii ClusterFirst, ambayo ina maana kwamba ombi lolote la DNS litatumwa kwa dnsmasq, kukimbia kwenye ganda kube-dns ndani ya nguzo, ambayo nayo itasambaza ombi kwa programu kube-dns, ikiwa jina linaisha na kiambishi tamati cha nguzo, au, vinginevyo, kwa seva ya DNS ya kiwango cha juu.

file /etc/resolv.conf ndani ya kila chombo chaguo-msingi kitaonekana kama hii:

nameserver 100.64.0.10
search namespace.svc.cluster.local svc.cluster.local cluster.local 
eu-west-1.compute.internal
options ndots:5

Kama unaweza kuona, kuna maagizo matatu:

  1. Seva ya jina ni IP ya huduma kube-dns
  2. Vikoa 4 vya utafutaji vya ndani vimebainishwa search
  3. Kuna chaguo ndots:5

Sehemu ya kuvutia ya usanidi huu ni jinsi vikoa na mipangilio ya utafutaji ya ndani ndots:5 kupata pamoja. Ili kuelewa hili, unahitaji kuelewa jinsi azimio la DNS kwa majina yasiyostahili hufanya kazi.

Jina kamili ni nini?

Jina lililohitimu kikamilifu ni jina ambalo hakuna utafutaji wa ndani utakaofanywa na jina litachukuliwa kuwa kamili wakati wa utatuzi wa jina. Kwa kawaida, programu ya DNS huchukulia jina kuwa limehitimu kikamilifu ikiwa itaishia na nukta (.), na halijahitimu vinginevyo. Hiyo ni google.com. imefafanuliwa kikamilifu na google.com - Hapana.

Je, jina lisilo na sifa hushughulikiwaje?

Programu inapounganishwa kwa seva pangishi ya mbali iliyobainishwa katika jina, utatuzi wa jina la DNS kwa kawaida hufanywa kwa simu ya mfumo, k.m. getaddrinfo(). Lakini ikiwa jina halijahitimu (haishii na .), ninashangaa ikiwa simu ya mfumo itajaribu kusuluhisha jina kama jina kabisa kwanza, au kupitia vikoa vya utaftaji wa ndani kwanza? Inategemea chaguo ndots.

Kutoka kwa mwongozo resolv.conf:

ndots:n

устанавливаСт ΠΏΠΎΡ€ΠΎΠ³ для количСства Ρ‚ΠΎΡ‡Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π² ΠΈΠΌΠ΅Π½ΠΈ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ сдСлан Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ запрос. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для n Ρ€Π°Π²Π½ΠΎ 1, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Π² ΠΈΠΌΠ΅Π½ΠΈ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ, имя Π±ΡƒΠ΄Π΅Ρ‚ сначала ΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π½ΠΎ ΠΊΠ°ΠΊ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ имя, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΊ Π½Π΅ΠΌΡƒ Π±ΡƒΠ΄ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ элСмСнты списка поиска.

Hii ina maana kwamba kama kwa ndots ikipewa thamani ya 5 na jina lina chini ya vitone 5, simu ya mfumo itajaribu kuitatua kwa kufuatana, kwanza kupitia vikoa vyote vya utafutaji vya ndani, na, ikiwa haijafaulu, hatimaye kuitatua kama jina kamili.

Kwanini basi ndots:5 inaweza kuathiri vibaya utendaji wa programu?

Kama unavyoweza kufikiria, ikiwa programu yako inatumia trafiki nyingi za nje, kwa kila muunganisho wa TCP ulioanzishwa (au kwa usahihi zaidi, kwa kila jina kutatuliwa), itatoa maswali 5 ya DNS kabla ya jina kutatuliwa kwa usahihi, kwa sababu itapitia kwanza. 4 kikoa cha utafutaji cha ndani, na mwisho itatoa ombi la azimio la jina kabisa.

Chati ifuatayo inaonyesha jumla ya trafiki kwenye moduli zetu 3 za kube-dns kabla na baada ya kubadilisha majina machache ya wapangishaji yaliyosanidiwa katika programu yetu hadi yale yaliyohitimu kikamilifu.

/etc/resolv.conf kwa maganda ya Kubernetes, ndots: chaguo la 5, jinsi hii inaweza kuathiri vibaya utendakazi wa programu.

Mchoro ufuatao unaonyesha muda wa kusubiri wa programu kabla na baada ya sisi kubadilisha majina kadhaa ya wapangishaji yaliyosanidiwa katika programu yetu hadi majina kamili (laini wima ya samawati ndio utumaji):

/etc/resolv.conf kwa maganda ya Kubernetes, ndots: chaguo la 5, jinsi hii inaweza kuathiri vibaya utendakazi wa programu.

Suluhisho # 1 - Tumia majina yaliyohitimu kikamilifu

Ikiwa una majina machache ya nje tuli (yaani yaliyofafanuliwa katika usanidi wa programu) ambayo unaunda idadi kubwa ya miunganisho, labda suluhisho rahisi zaidi ni kuzibadilisha kwa zilizohitimu kikamilifu kwa kuziambatanisha tu. mwishoni.

Hii sio suluhisho la mwisho, lakini inasaidia haraka, ingawa sio safi, kuboresha hali hiyo. Tulitumia kiraka hiki kutatua tatizo letu, ambalo matokeo yake yalionyeshwa kwenye picha za skrini hapo juu.

Suluhisho # 2 - ubinafsishaji ndots Π² dnsConfig

Katika Kubernetes 1.9, utendakazi ulionekana katika hali ya alpha (toleo la beta v1.10), ambayo hukuruhusu kudhibiti vyema vigezo vya DNS kupitia sifa ya ganda katika dnsConfig. Miongoni mwa mambo mengine, inakuwezesha kusanidi thamani ndots kwa pod maalum, i.e.

apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: dns-example
spec:
  containers:
    - name: test
      image: nginx
  dnsConfig:
    options:
      - name: ndots
        value: "1"

Vyanzo

Pia soma nakala zingine kwenye blogi yetu:

Chanzo: mapenzi.com

Kuongeza maoni