/etc/resolv.conf pikeun pods Kubernetes, pilihan dots:5, kumaha ieu tiasa mangaruhan négatif kinerja aplikasi

/etc/resolv.conf pikeun pods Kubernetes, pilihan dots:5, kumaha ieu tiasa mangaruhan négatif kinerja aplikasi

Kami nembe ngaluncurkeun Kubernetes 1.9 dina AWS nganggo Kops. Kamari, bari lancar ngaluncurkeun lalu lintas énggal ka klaster Kubernetes panggedéna, kuring mimiti ningali kasalahan résolusi ngaran DNS anu teu biasa anu diasupkeun ku aplikasi kami.

Aya seueur pisan ngeunaan ieu dina GitHub nyarios, janten kuring mutuskeun pikeun terang ogé. Tungtungna, kuring sadar yén bisi urang ieu disababkeun ku ngaronjat beban on kube-dns и dnsmasq. Hal anu paling narik sareng énggal pikeun kuring mangrupikeun alesan pikeun paningkatan anu signifikan dina lalu lintas pamundut DNS. Tulisan kuring ngeunaan ieu sareng naon anu kudu dilakukeun ngeunaan éta.

Resolusi DNS di jero wadahna - sapertos dina sistem Linux naon waé - ditangtukeun ku file konfigurasi /etc/resolv.conf. Kubernetes standar dnsPolicy eta ClusterFirst, nu hartina sagala pamundut DNS bakal diteruskeun ka dnsmasq, ngajalankeun dina pod a kube-dns jero kluster, anu dina gilirannana bakal neruskeun pamundut ka aplikasi nu kube-dns, upami nami ditungtungan ku sufiks klaster, atanapi, upami henteu, ka server DNS tingkat anu langkung luhur.

file /etc/resolv.conf di jero unggal wadahna standarna bakal siga kieu:

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

Sakumaha anjeun tiasa tingali, aya tilu diréktif:

  1. Pangladén ngaran nyaéta IP tina jasa éta kube-dns
  2. 4 domain pilarian lokal dieusian search
  3. Aya hiji pilihan ndots:5

Bagian metot tina konfigurasi ieu kumaha domain pilarian lokal sareng setelan ndots:5 akur babarengan. Pikeun ngartos ieu, anjeun kedah ngartos kumaha résolusi DNS pikeun nami anu teu cocog dianggo.

Naon nami lengkep?

Ngaran anu mumpuni sapinuhna nyaéta nami anu henteu aya pamariksaan lokal anu bakal dilakukeun sareng nami bakal dianggap mutlak salami resolusi nami. Numutkeun konvénsi, parangkat lunak DNS nganggap hiji nami janten mumpuni sapinuhna upami ditungtungan ku titik (.), sareng henteu mumpuni sapinuhna. nyaeta google.com. diartikeun pinuh sarta google.com - Henteu.

Kumaha nami anu teu cocog diurus?

Lamun hiji aplikasi nyambung ka host jauh dieusian dina ngaran, resolusi ngaran DNS ilaharna dipigawé maké panggero sistem, misalna. getaddrinfo(). Tapi lamun ngaran teu minuhan sarat (henteu ditungtungan ku .), Kuring heran lamun sistem panggero bakal coba pikeun ngabéréskeun ngaran salaku ngaran mutlak munggaran, atawa ngaliwatan domain pilarian lokal munggaran? Eta gumantung kana pilihan ndots.

Tina manual resolv.conf:

ndots:n

устанавливает порог для количества точек, которые должны появиться в имени, прежде чем будет сделан начальный абсолютный запрос. Значение по умолчанию для n равно 1, что означает, что если в имени есть какие-либо точки, имя будет сначала опробовано как абсолютное имя, прежде чем к нему будут добавлены какие-либо элементы списка поиска.

Ieu ngandung harti yén lamun keur ndots dibéré nilai 5 sarta ngaran ngandung kirang ti 5 titik, sistem panggero bakal nyobian ngabéréskeun eta sequentially, kahiji traversing sadayana domain pilarian lokal, sarta, lamun gagal, pamustunganana resolving salaku hiji ngaran mutlak.

Naha harita ndots:5 Naha éta tiasa mangaruhan négatif kinerja aplikasi?

Sakumaha anjeun tiasa bayangkeun, upami aplikasi anjeun nganggo seueur lalu lintas éksternal, pikeun unggal sambungan TCP anu diadegkeun (atanapi langkung tepatna, pikeun unggal nami anu direngsekeun), éta bakal ngaluarkeun 5 patarosan DNS sateuacan nami direngsekeun leres, sabab éta bakal ngaliwat heula. 4 domain pilarian lokal, sarta dina tungtungna bakal ngaluarkeun pamundut resolusi ngaran mutlak.

Bagan di handap ieu nunjukkeun total lalu lintas dina 3 modul kube-dns kami sateuacan sareng saatos kami ngalihkeun sababaraha hostname anu dikonpigurasi dina aplikasi kami ka anu mumpuni.

/etc/resolv.conf pikeun pods Kubernetes, pilihan dots:5, kumaha ieu tiasa mangaruhan négatif kinerja aplikasi

Diagram di handap ieu nunjukkeun latency aplikasi sateuacan sareng saatos urang ngalihkeun sababaraha hostnames anu dikonpigurasi dina aplikasi urang kana nami lengkep (garis biru nangtung nyaéta panyebaran):

/etc/resolv.conf pikeun pods Kubernetes, pilihan dots:5, kumaha ieu tiasa mangaruhan négatif kinerja aplikasi

Solusi #1 - Paké ngaran mumpuni pinuh

Upami Anjeun gaduh sababaraha ngaran éksternal statik (i.e. didefinisikeun dina konfigurasi aplikasi) nu anjeun nyieun angka nu gede ngarupakeun sambungan, sugan solusi pangbasajanna nyaéta pindah ka nu mumpuni pinuh ku saukur nambahkeun aranjeunna. ditungtungna.

Ieu sanes solusi final, tapi mantuan pikeun gancang, sanajan teu bersih, ngaronjatkeun kaayaan. Kami nerapkeun patch ieu pikeun ngabéréskeun masalah urang, hasilna anu dipidangkeun dina layar di luhur.

Solusi #2 - kustomisasi ndots в dnsConfig

Dina Kubernetes 1.9, fungsionalitas mucunghul dina mode alfa (vérsi béta v1.10), nu ngidinan Anjeun pikeun ngadalikeun parameter DNS hadé ngaliwatan sipat pod di. dnsConfig. Diantara hal séjén, éta ngidinan Anjeun pikeun ngonpigurasikeun nilai ndots pikeun pod husus, i.e.

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

sumber

Baca ogé artikel séjén dina blog urang:

sumber: www.habr.com

Tambahkeun komentar