/etc/resolv.conf ar gyfer codennau Kubernetes, opsiwn ndots:5, sut y gall hyn effeithio'n negyddol ar berfformiad y cais

/etc/resolv.conf ar gyfer codennau Kubernetes, opsiwn ndots:5, sut y gall hyn effeithio'n negyddol ar berfformiad y cais

Yn ddiweddar, fe wnaethom lansio Kubernetes 1.9 ar AWS gyda chymorth Kops. Ddoe, wrth gyflwyno traffig newydd yn llyfn i'n clwstwr Kubernetes mwyaf, dechreuais sylwi ar wallau datrys enw DNS anarferol a gofnodwyd gan ein cais.

Mae gan GitHub dipyn amdano. siaradodd, felly penderfynais ymchwilio iddo hefyd. O ganlyniad, sylweddolais fod hyn yn ein hachos ni wedi'i achosi gan lwyth cynyddol ymlaen kube-dns ΠΈ dnsmasq. Y mwyaf diddorol a newydd i mi oedd yr union reswm dros y cynnydd sylweddol mewn traffig ymholiadau DNS. YnglΕ·n Γ’ hyn a beth i'w wneud ag ef, fy swydd.

Mae datrysiad DNS y tu mewn i'r cynhwysydd - fel mewn unrhyw system Linux - yn cael ei bennu gan y ffeil ffurfweddu /etc/resolv.conf. Kubernetes rhagosodedig dnsPolicy hwn ClusterFirst, sy'n golygu y bydd unrhyw gais DNS yn cael ei ailgyfeirio i dnsmasqrhedeg mewn pod kube-dns y tu mewn i'r clwstwr, a fydd yn ei dro yn anfon y cais ymlaen at y cais kube-dns, os yw'r enw'n gorffen gydag Γ΄l-ddodiad clwstwr, neu fel arall, i weinydd DNS lefel uwch.

file /etc/resolv.conf bydd y tu mewn i bob cynhwysydd yn ddiofyn yn edrych fel hyn:

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

Fel y gwelwch, mae tair cyfarwyddeb:

  1. Y gweinydd enw yw IP y gwasanaeth kube-dns
  2. Penodwyd 4 parth chwilio lleol search
  3. Mae opsiwn ndots:5

Rhan ddiddorol y cyfluniad hwn yw sut mae'r parthau a'r gosodiadau chwilio lleol ndots:5 cydfodoli. I ddeall hyn, mae angen i chi ddeall sut mae datrysiad DNS yn gweithio ar gyfer enwau diamod.

Beth yw enw llawn?

Mae enw cwbl gymwys yn enw na fydd yn cael ei chwilio'n lleol ac a fydd yn cael ei drin fel enw absoliwt wrth ddatrys enw. Yn Γ΄l y confensiwn, mae'r meddalwedd DNS yn ystyried bod enw'n gwbl gymwys os yw'n gorffen gyda dot (.), ac nad yw'n gwbl gymwys fel arall. Hynny yw google.com. wedi'u diffinio'n llawn a google.com - na.

Sut yr ymdrinnir ag enw diamod?

Pan fydd cais yn cysylltu Γ’'r gwesteiwr o bell a nodir yn yr enw, mae datrysiad enw DNS fel arfer yn cael ei wneud gan ddefnyddio galwad system, er enghraifft, getaddrinfo(). Ond os yw'r enw'n anghyflawn (nid yw'n gorffen gyda .), tybed a fydd yr alwad system yn ceisio datrys yr enw fel un absoliwt yn gyntaf, neu a fydd yn mynd trwy'r parthau chwilio lleol yn gyntaf? Mae'n dibynnu ar yr opsiwn ndots.

O'r llawlyfr ar gyfer resolv.conf:

ndots:n

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

Mae hyn yn golygu os o blaid ndots wedi'i osod i 5 ac mae'r enw'n cynnwys llai na 5 dot, bydd galwad y system yn ceisio ei ddatrys yn ddilyniannol, gan fynd trwy'r holl barthau chwilio lleol yn gyntaf, a methu, gan ei ddatrys yn y pen draw fel enw absoliwt.

Pam felly ndots:5 a all effeithio'n negyddol ar berfformiad y cais?

Fel y gallwch ddychmygu, os yw'ch cais yn defnyddio llawer o draffig allanol, ar gyfer pob cysylltiad TCP sefydledig (neu'n fwy manwl gywir, ar gyfer pob enw sydd wedi'i ddatrys), bydd yn cyhoeddi 5 ymholiad DNS cyn i'r enw gael ei ddatrys yn iawn, oherwydd bydd yn mynd trwyddo yn gyntaf. 4 parth chwilio lleol, ac ar y diwedd bydd yn cyhoeddi cais penderfyniad enw absoliwt.

Mae'r siart canlynol yn dangos cyfanswm y traffig ar ein codennau 3 kube-dns cyn ac ar Γ΄l i ni newid sawl enw gwesteiwr a ffurfiwyd yn ein cymhwysiad i rai cymwysedig.

/etc/resolv.conf ar gyfer codennau Kubernetes, opsiwn ndots:5, sut y gall hyn effeithio'n negyddol ar berfformiad y cais

Mae'r siart canlynol yn dangos hwyrni'r rhaglen cyn ac ar Γ΄l i ni newid sawl enw gwesteiwr a ffurfiwyd yn ein cymhwysiad i rai llawn (y llinell las fertigol yw defnydd):

/etc/resolv.conf ar gyfer codennau Kubernetes, opsiwn ndots:5, sut y gall hyn effeithio'n negyddol ar berfformiad y cais

Ateb #1 - Defnyddiwch enwau cwbl gymwys

Os nad oes gennych lawer o enwau allanol statig (h.y. a ddiffinnir yng nghyfluniad y cymhwysiad) yr ydych yn creu nifer fawr o gysylltiadau iddynt, efallai mai'r ateb hawsaf yw eu newid i rai cwbl gymwys trwy ychwanegu yn unig. Yn y diwedd.

Nid yw hwn yn ateb terfynol, ond mae'n helpu i wella'r sefyllfa yn gyflym, os nad yn lΓ’n. Fe wnaethom gymhwyso'r clwt hwn i ddatrys ein problem, a dangoswyd y canlyniadau yn y sgrinluniau uchod.

Penderfyniad #2 - addasu ndots Π² dnsConfig

Cyflwynodd Kubernetes 1.9 nodwedd yn y modd alffa (fersiwn beta v1.10) sy'n eich galluogi i reoli gosodiadau DNS yn well trwy eiddo pod yn dnsConfig. Ymhlith pethau eraill, mae'n caniatΓ‘u ichi addasu'r gwerth ndots ar gyfer pod penodol, h.y.

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

Ffynonellau

Darllenwch erthyglau eraill ar ein blog hefyd:

Ffynhonnell: hab.com

Ychwanegu sylw