Vissza a bloghoz

Kubernetes DNS szolgáltatás: Útmutató kezdőknek

Kubernetes DNS szolgáltatás: Útmutató kezdőknek

Kubernetes, más néven K8s, egy nyílt forráskódú orchestrációs rendszer a konténerizált alkalmazások telepítésének, skálázásának és kezelésének automatizálására. Hordozhatósága, rugalmassága és automatikus skálázási képességei széles körben használt rendszerré teszik. A kiemelkedő funkciók közül a szolgáltatásokhoz és podokhoz tartozó DNS-rekordok létrehozásának lehetősége teszi verhetetlenné más szoftverrendszerekkel szemben. A Kubernetes DNS-szolgáltatás lehetővé teszi, hogy a szolgáltatásokat IP-címek helyett konzisztens DNS-nevekkel érje el.

Előfeltételek

Ahhoz, hogy a legtöbbet hozza ki az útmutatóból, és jobban megértse a Kubernetes DNS-szolgáltatást, mindenképpen frissítse fel tudását a Kubernetes alapjaival. Szintén hasznos lehet elolvasni a DNS-terminológiák, -összetevők és -fogalmak áttekintése című részt, hogy jobban megértse a DNS-fogalmakat. Emellett a Docker-ökoszisztéma áttekintése és a konténerizációs technológia alapjai szintén nagy előnyt jelentenek.

Mi az a DNS-rendszer?

A Domain Name System (DNS) egy olyan mechanizmus, amely különféle információkat kapcsol össze könnyen megjegyezhető nevekkel, például IP-címekkel. A DNS-rendszer használata a kért nevek IP-címekre történő lefordítására megkönnyíti a végfelhasználók számára a cél domain név könnyed elérését. A legtöbbt Kubernetes-fürt tartalmaz egy alapértelmezés szerint konfigurált belső DNS-szolgáltatást, amely könnyűsúlyú megközelítést kínál a szolgáltatásfelfedezéshez (service discovery). Még akkor is, ha a podokat és szolgáltatásokat létrehozzák, törlik vagy áthelyezik a csomópontok között, a beépített szolgáltatásfelfedezés leegyszerűsíti az alkalmazások számára a Kubernetes-fürtök azonosítását és a velük való kommunikációt.

A Kubernetes legújabb verzióiban, a Kubernetes DNS-szolgáltatás technikai részletei megváltoztak. Ez az útmutató bemutatja a Kubernetes DNS-szolgáltatás kube-dns és CoreDNS implementációit is. Részletesen megismerjük a Kubernetes DNS-rekordokat, és bemutatjuk a Kubernetes DNS működését.

Mit tartalmaz a Kubernetes DNS-szolgáltatás?

Korábban, az 1.11-es verzió megjelenése előtt a Kubernetes DNS-szolgáltatás a kube-dns-en alapult. A biztonság és a magánélet védelme azonban továbbra is komoly aggodalomra adott okot. Később a Kubernetes közösség bevezette a CoreDNS-t az új, 1.11-es verzióban a kube-dns biztonsági és stabilitási problémáinak megoldására.

Függetlenül attól, hogy melyik szoftververziót használja a DNS-rekordok kezelésére, a kube-dns és a CoreDNS hasonló módon működik:

  • Egy kube-dns szolgáltatás és egy vagy több pod jön létre.
  • A kube-dns szolgáltatás figyeli a Kubernetes API-t a szolgáltatás- és végpont-események tekintetében, és szükség szerint módosítja a DNS-bejegyzéseit. Amikor létrehozási, szerkesztési vagy törlési műveletekkel módosítja ezeket a Kubernetes-szolgáltatásokat és a hozzájuk kapcsolódó podokat, ezek az események automatikusan kiváltódnak.
  • A Kubelet hozzárendeli a kube-dns szolgáltatás fürt IP-címét minden új pod etc/resolv.conf nameserver opciójához, a megfelelő search beállításokkal együtt, hogy lehetővé tegye a rövidebb gépneveket:
  • A konténerizált alkalmazások ezután feloldhatják az olyan gépneveket, mint a example-service.namespace a megfelelő fürt IP-címre.

A Kubernetes DNS-rekordok áttekintése

Ismerjük meg jobban a Kubernetes DNS-rekordokat egy példa segítségével. Egy Kubernetes-szolgáltatás teljes DNS A-rekordja így fog kinézni:

service.namespace.svc.cluster.local

Egy podnak ebben a formátumban lenne rekordja, amely a pod valós IP-címét képviselné:

10.32.0.125.namespace.pod.cluster.local

Emellett SRV rekordok jönnek létre egy Kubernetes-szolgáltatás megadott portjaihoz:

Ennek eredményeként az alkalmazása vagy mikroszolgáltatása egy egyszerű és konzisztens gépnevet hívhat meg, hogy elérje a fürtön lévő többi szolgáltatást vagy podot, a beépített DNS-alapú szolgáltatásfelfedezési mechanizmusnak köszönhetően.

Rövidebb gépnevek feloldása és domainek keresése

Nem lesz mindig szüksége a teljes hosztnév használatára egy másik szolgáltatás eléréséhez a beállított keresési tartomány utótagok miatt a resolv.conf fájlban. Ha ugyanabban a névtérben lévő szolgáltatással lép kapcsolatba, egyszerűen hívhatja a nevén:

Adja hozzá a other-service részt a lekérdezéshez, ha a szolgáltatás egy másik névtérben van:

Legalább a következőket kell használnia, ha egy podot céloz meg:

Csak a .svc utótagok egészülnek ki automatikusan az alapértelmezett resolv.conf fájlban. Ezért elengedhetetlen a beállítások megadása egészen a .pod részig. Ezután tekintsük át az eddig megismert két alternatív Kubernetes DNS-implementáció részleteit.

Kubernetes DNS-implementáció

A Kubernetes 1.11-es verziója új szoftvert biztosított a kube-dns szolgáltatás kezelésére, amint azt az előző szakaszban említettük. Az új frissítés mögött álló fő ok a szolgáltatás teljesítményének és biztonságának javítása volt. Kezdjük a kube-dns integrációval a legelejétől.

  1. kube-dns

A korábbi Kubernetes 1.11-es verzióban a kube-dns szolgáltatásnak három konténere működött egy kube-dns podban a kube-system névtérben. Tekintse meg az alábbi három konténert:

  • kube-dns: egy konténer, amely a SkyDNS szoftvert futtatja, és DNS-lekérdezés-feloldó szolgáltatásként működik.
  • dnsmasq: A SkyDNS válaszait a dnsmasq gyorsítótárazza, amely egy elterjedt, könnyű DNS-feloldó és gyorsítótár.
  • sidecar: egy konténer a szolgáltatás mellett, amely metrikajelentéseket készít és válaszol az állapotellenőrzésekre.

A CoreDNS a Dnsmasq biztonsági sebezhetőségei és a SkyDNS skálázhatósági teljesítményproblémái miatt jött létre.

  1. CoreDNS

Új Kubernetes DNS-szolgáltatásként a CoreDNS-t a Kubernetes 1.11-es verziójában általánosan elérhetővé (General Availability) nyilvánították. Ez azt jelenti, hogy készen áll az éles használatra, és számos telepítőeszköz, valamint felügyelt Kubernetes-szolgáltató alapértelmezett fürt DNS-szolgáltatásként fogja használni.

A CoreDNS egy rugalmas és bővíthető DNS-szerver, amely Kubernetes DNS-fürtként működik. Ellátja a korábbi rendszer összes funkcióját. Egy DNS-konténer felelős a DNS-lekérdezések feloldásáért és gyorsítótárazásáért. A CoreDNS egyetlen konténerben válaszol az állapotellenőrzésekre és biztosítja a metrikákat. Emellett orvosol néhány kisebb hibát, és új képességeket kínál a teljesítmény- és biztonsági problémák megoldására:

  • Néhány, a stubDomain-ek használata és a külső szolgáltatások közötti konfliktus megoldódott.
  • Egyes bejegyzések visszaadási sorrendjének véletlenszerűvé tételével a CoreDNS javíthatja a DNS-alapú round-robin terheléselosztást.
  • Azáltal, hogy hatékonyabban iterál végig a resolv.conf fájlban meghatározott keresési tartomány utótagokon, az autopath nevű funkció javíthatja a DNS-válaszidőket a külső hosztnevek feloldásakor.
  • Még ha a pod nem is létezik, a kube-dns 10.32.0.125.namespace.pod.cluster.local mindig feloldódik a 10.32.0.125. CoreDNS offers a pods validated mode that will only resolve if a pod with the correct IP address and namespace exists.

A Kubernetes endpoints, autopaths és wildcards, témakörökben szerzett ismereteinek bővítéséhez tekintse meg az arról szóló útmutatót, hogy hogyan teszi lehetővé a Kubernetes a zónaadatok olvasását a fürtjéből.

Testreszabási funkciók

A Kubernetes lehetővé teszi a DNS-podok konfigurálását és a fürt DNS-feloldásának testreszabását, köszönhetően a Kubernetes DNS-szolgáltatás testreszabásának. A rendszergazdák kihasználhatják ezeket a szolgáltatásokat a resolv.conf fájlban meghatározott felsőbb szintű névszerverek vagy keresési tartomány utótagok módosítására. Mindenekelőtt létezik egy kiegészítő funkció a podok és konténerek személyre szabására a dnsConfig opció használatával:

Kubernetes DNS Demo Pod Yaml

Ezen konfiguráció frissítése kényszeríti a pod resolv.conf fájljának újraírását, lehetővé téve a módosítások életbe lépését. A fenti beállítás létrehoz egy fájlt, amely nameserver 203.0.113.44 és search custom.dns.local sorokat tartalmaz, ami közvetlenül átkerül a normál resolv.conf opciókba.

Összegzés

Ebben az útmutatóban végigvezettük a Kubernetes DNS szolgáltatás alapjain és annak különböző verziókban történő megvalósításán. Egy példa segítségével a Kubernetes DNS rekordokat is áttekintettük. Emellett bemutattunk néhány további konfigurációs lehetőséget a podok testreszabásához és a DNS-lekérdezések feloldásához. Ez lefedi a Kubernetes DNS szolgáltatás alapjait, de a tanulásnak itt nem szabad véget érnie. Tekintse meg a hivatalos Kubernetes dokumentációt, hogy többet tudjon meg a témáról.

Ha szeretné tovább bővíteni DevOps ismereteit, és elmerülne a Kubernetes alapjaiban, tekintse meg a következő útmutatókat a blogunkon:

Kellemes kódolást!

author

Pranay Kapgate

Szerző · CloudSigma

Preslav Dobrev a CloudSigma kreatív tervezője, aki hagyományos és innovatív marketingcsatornák segítségével következetes vállalati identitás kialakítására összpontosít. Kiemelkedően képes ötvözni a művészi látásmódot a stratégiai marketinggel, hogy hatásos márkatörténeteket hozzon létre.

Hozzászólások

Még nincsenek hozzászólások. Legyen Ön az első.