Kubernetes pods uchun /etc/resolv.conf, ndots:5 varianti, bu ilova ishlashiga qanday salbiy ta'sir ko'rsatishi mumkin

Kubernetes pods uchun /etc/resolv.conf, ndots:5 varianti, bu ilova ishlashiga qanday salbiy ta'sir ko'rsatishi mumkin

Biz yaqinda Kops yordamida AWS-da Kubernetes 1.9-ni ishga tushirdik. Kecha, bizning Kubernetes klasterlarimizning eng kattasiga yangi trafikni muammosiz tarqatayotganda, men ilovamiz tomonidan qayd etilgan DNS nomlarini aniqlashda noodatiy xatolarni seza boshladim.

GitHub-da bu haqda juda ko'p narsa bor gapirdi, shuning uchun men ham buni aniqlashga qaror qildim. Oxir-oqibat, men tushundimki, bizning holatlarimizda bu yukning ko'payishi bilan bog'liq kube-dns ΠΈ dnsmasq. Men uchun eng qiziqarli va yangi narsa DNS so'rovi trafigining sezilarli darajada oshishiga sabab bo'ldi. Mening postim bu va bu haqda nima qilish kerakligi haqida.

Konteyner ichidagi DNS ruxsati - har qanday Linux tizimida bo'lgani kabi - konfiguratsiya fayli bilan belgilanadi /etc/resolv.conf. Standart Kubernetes dnsPolicy u ClusterFirst, bu har qanday DNS so'rovi yuborilishini anglatadi dnsmasq, podada yugurish kube-dns klaster ichida, bu esa o'z navbatida so'rovni ilovaga yo'naltiradi kube-dns, agar ism klaster qo'shimchasi bilan tugasa yoki aks holda yuqori darajadagi DNS serveriga.

Fayl /etc/resolv.conf har bir konteyner ichida standart quyidagicha ko'rinadi:

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

Ko'rib turganingizdek, uchta ko'rsatma mavjud:

  1. Nom serveri xizmatning IP-manzilidir kube-dns
  2. 4 ta mahalliy qidiruv domenlari koΚ»rsatilgan search
  3. Variant bor ndots:5

Ushbu konfiguratsiyaning qiziqarli qismi mahalliy qidiruv domenlari va sozlamalari ndots:5 birga bo'ling. Buni tushunish uchun siz nomaqbul nomlar uchun DNS rezolyutsiyasi qanday ishlashini tushunishingiz kerak.

To'liq ism nima?

To'liq malakali ism - bu nom bo'lib, u uchun mahalliy qidiruv amalga oshirilmaydi va nom echish paytida mutlaq hisoblanadi. An'anaga ko'ra, DNS dasturiy ta'minoti, agar nom nuqta (.) bilan tugasa, uni to'liq malakali deb hisoblaydi, aks holda to'liq mos kelmaydi. Ya'ni google.com. to'liq aniqlangan va google.com - yo'q.

Noma'lum ism qanday ko'rib chiqiladi?

Ilova nomda ko'rsatilgan masofaviy xostga ulanganda, DNS nomini aniqlash odatda tizim chaqiruvi yordamida amalga oshiriladi, masalan. getaddrinfo(). Ammo agar nom nomaqbul bo'lsa (. bilan tugamaydi), menimcha, tizim chaqiruvi birinchi navbatda nomni mutlaq nom sifatida hal qilishga harakat qiladimi yoki avval mahalliy qidiruv domenlaridan o'tadimi? Bu variantga bog'liq ndots.

Qo'llanmadan resolv.conf:

ndots:n

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

Bu shuni anglatadiki, agar uchun ndots 5 qiymati va nomda 5 nuqtadan kam bo'lsa, tizim chaqiruvi avval barcha mahalliy qidiruv domenlarini bosib o'tib, uni ketma-ket hal qilishga harakat qiladi va agar muvaffaqiyatsiz bo'lsa, uni mutlaq nom sifatida hal qiladi.

Nima sababdan ndots:5 bu dastur ishlashiga salbiy ta'sir ko'rsatishi mumkinmi?

Tasavvur qilganingizdek, agar ilovangiz juda ko'p tashqi trafikdan foydalansa, har bir o'rnatilgan TCP ulanishi uchun (aniqrog'i, hal qilingan har bir nom uchun), u nom to'g'ri echilishidan oldin 5 ta DNS so'rovini beradi, chunki u birinchi bo'lib o'tadi. 4 mahalliy qidiruv domeni va oxirida mutlaq nomni hal qilish so'rovini chiqaradi.

Quyidagi diagrammada ilovamizda sozlangan bir nechta xost nomlarini toΚ»liq malakalilariga almashtirishdan oldin va keyin 3 kube-dns modulimizdagi umumiy trafik koΚ»rsatilgan.

Kubernetes pods uchun /etc/resolv.conf, ndots:5 varianti, bu ilova ishlashiga qanday salbiy ta'sir ko'rsatishi mumkin

Quyidagi diagrammada ilovamizda sozlangan bir nechta xost nomlarini toΚ»liq nomlarga almashtirishdan oldin va keyin dasturning kechikish vaqti koΚ»rsatilgan (vertikal koΚ»k chiziq – tarqatish):

Kubernetes pods uchun /etc/resolv.conf, ndots:5 varianti, bu ilova ishlashiga qanday salbiy ta'sir ko'rsatishi mumkin

Yechim β„–1 - To'liq malakali nomlardan foydalaning

Agar sizda ko'p sonli ulanishlar yaratadigan bir nechta statik tashqi nomlaringiz bo'lsa (ya'ni, ilova konfiguratsiyasida belgilangan), ehtimol eng oddiy yechim ularni qo'shish orqali to'liq malakali nomlarga o'tkazishdir. oxirida.

Bu yakuniy yechim emas, lekin bu vaziyatni tezda yaxshilashga yordam beradi, ammo toza bo'lmasa ham. Muammoni hal qilish uchun biz ushbu yamoqni qo'lladik, uning natijalari yuqoridagi skrinshotlarda ko'rsatilgan.

Yechim β„–2 - moslashtirish ndots Π² dnsConfig

Kubernetes 1.9-da funksionallik alfa rejimida (beta-versiya v1.10) paydo bo'ldi, bu sizga pod xususiyati orqali DNS parametrlarini yaxshiroq boshqarish imkonini beradi. dnsConfig. Boshqa narsalar qatorida, bu qiymatni sozlash imkonini beradi ndots ma'lum bir pod uchun, ya'ni.

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

Axborot manbalari

Shuningdek, bizning blogimizdagi boshqa maqolalarni o'qing:

Manba: www.habr.com

a Izoh qo'shish