Kubernetes, také známý jako K8s, je open-source orchestrační systém pro automatizaci nasazování, škálování a správy kontejnerizovaných aplikací. Jeho přenositelnost, flexibilita a schopnosti automatického škálování z něj dělají široce používaný systém. Ze všech vynikajících funkcí ho možnost vytvářet DNS záznamy pro služby a pody činí nepřekonatelným ve srovnání s jinými softwarovými systémy. Služba Kubernetes DNS vám umožňuje kontaktovat služby pomocí konzistentních DNS názvů namísto IP adres.
Požadavky
Abyste z tohoto návodu vytěžili maximum a lépe porozuměli službě Kubernetes DNS, nezapomeňte si osvěžit základy Kubernetes. Prospěje vám také přečtení Přehledu DNS terminologie, komponent a konceptů, abyste lépe porozuměli konceptům DNS. Kromě toho vám přehled ekosystému Docker a základy technologie kontejnerizace poskytnou velkou výhodu.
Co je to DNS systém?
Domain Name System (DNS) je mechanismus pro propojení různých druhů informací se snadno zapamatovatelnými názvy, jako jsou IP adresy. Použití DNS systému k překladu požadovaných názvů na IP adresy usnadňuje koncovým uživatelům bez námahy dosáhnout jejich cílového doménového jména. Většina clusterů Kubernetes obsahuje interní DNS službu, která je ve výchozím nastavení nakonfigurována tak, aby nabízela odlehčený přístup pro objevování služeb (service discovery). I když jsou pody a služby vytvářeny, odstraňovány nebo přesouvány mezi uzly, vestavěné objevování služeb zjednodušuje aplikacím identifikaci a komunikaci s clustery Kubernetes.
V nedávných verzích Kubernetes, se technické podrobnosti služby Kubernetes DNS změnily. Tento návod si klade za cíl představit implementace kube-dns i CoreDNS služby Kubernetes DNS. Podrobně porozumíme DNS záznamům v Kubernetes a ukážeme si, jak Kubernetes DNS funguje.
Co je součástí služby Kubernetes DNS?
Dříve, před vydáním verze 1.11, byla služba Kubernetes DNS založena na kube-dns. Bezpečnost a soukromí však stále představovaly vážný problém. Později komunita Kubernetes v nové verzi 1.11 představila CoreDNS, aby vyřešila problémy s bezpečností a stabilitou kube-dns.
Bez ohledu na to, jakou verzi softwaru pro správu DNS záznamů používáte, kube-dns a CoreDNS fungují podobným způsobem:
- Vytvoří se kube-dns služba a jeden nebo více podů.
- Služba kube-dns monitoruje Kubernetes API ohledně událostí služeb a koncových bodů a podle potřeby mění své DNS záznamy. Když tyto služby Kubernetes a jejich související pody upravíte pomocí operací vytvoření, úpravy nebo odstranění, tyto události se automaticky spustí.
- Kubelet přiřadí IP adresu clusteru služby kube-dns každému novému podu do volby etc/resolv.conf nameserver, společně s vhodným nastavením search pro umožnění kratších názvů hostitelů:
|
1 2 3 |
nameserver 10.32.0.10 search namespace.svc.cluster.local svc.cluster.local cluster.local options ndots:5 |
-
Kontejnerizované aplikace pak mohou překládat názvy hostitelů jako example-service.namespace na příslušnou IP adresu clusteru.
Přehled DNS záznamů v Kubernetes
Pojďme si lépe vysvětlit DNS záznamy v Kubernetes na příkladu. Celý DNS záznam typu A pro službu Kubernetes bude vypadat takto:
service.namespace.svc.cluster.local
Pod by měl záznam v tomto formátu, který by reprezentoval skutečnou IP adresu podu:
10.32.0.125.namespace.pod.cluster.local
Kromě toho se vytvářejí SRV záznamy pro specifikované porty služby Kubernetes:
|
1 |
_port-name._protocol.service.namespace.svc.cluster.local |
Díky tomu může vaše aplikace nebo mikroslužba přistupovat k jednoduchému a konzistentnímu názvu hostitele, aby dosáhla na ostatní služby nebo pody v clusteru, a to díky vestavěnému mechanismu objevování služeb založenému na DNS.
Překlad kratších názvů hostitelů a vyhledávání domén
Nebudete muset vždy používat celý název hostitele pro přístup k jiné službě, a to kvůli příponám vyhledávacích domén nastaveným v resolv.conf souboru. Pokud kontaktujete službu ve stejném jmenném prostoru, můžete ji volat pouze jejím názvem:
|
1 |
other-service |
Přidejte other-service k dotazu, pokud je služba v jiném jmenném prostoru:
|
1 |
other-service.other-namespace |
Pokud se snažíte kontaktovat pod, budete muset použít alespoň následující:
|
1 |
pod-ip.other-namespace.pod |
Pouze přípony .svc jsou automaticky doplňovány ve výchozím resolv.conf souboru. Proto je nezbytné specifikovat nastavení až po .pod. Dále si projdeme složitosti dvou alternativních implementací DNS v Kubernetes, o kterých jsme se dosud dozvěděli.
Implementace DNS v Kubernetes
Kubernetes verze 1.11 přinesl nový software pro správu služby kube-dns , jak bylo zmíněno v předchozí části. Hlavním důvodem nové aktualizace bylo zlepšení výkonu a zabezpečení této služby. Začněme s integrací kube-dns od samého začátku.
-
kube-dns
V předchozí verzi Kubernetes 1.11 měla služba kube-dns tři kontejnery běžící v podu kube-dns ve jmenném prostoru kube-system . Podívejte se na tyto tři kontejnery níže:
- kube-dns: kontejner, který spouští SkyDNS a funguje jako služba pro překlad DNS dotazů.
- dnsmasq: Odpovědi ze SkyDNS jsou ukládány do mezipaměti pomocí dnsmasq, což je běžný odlehčený DNS resolver a cache.
- sidecar: kontejner na straně služby, který provádí reportování metrik a reaguje na kontroly stavu (health checks).
CoreDNS byl vytvořen v důsledku bezpečnostních zranitelností v Dnsmasq a obav o výkon a škálovatelnost u SkyDNS.
-
CoreDNS
Jako nová DNS služba pro Kubernetes byl CoreDNS v Kubernetes verze 1.11 povýšen na úroveň General Availability (obecná dostupnost). To znamená, že je připraven pro produkční nasazení a bude používán mnoha instalačními nástroji a poskytovateli spravovaného Kubernetes jako výchozí DNS služba clusteru.
CoreDNS je flexibilní a rozšiřitelný DNS server, který funguje jako DNS pro Kubernetes cluster. Plní všechny funkce předchozího systému. DNS kontejner je zodpovědný za překlad a ukládání DNS dotazů do mezipaměti. CoreDNS reaguje na kontroly stavu a poskytuje metriky v jediném kontejneru. Navíc řeší několik drobných nedostatků a poskytuje nové možnosti pro řešení problémů s výkonem a zabezpečením:
- Byly vyřešeny některé konflikty mezi používáním stubDomains a externích služeb.
- Náhodným řazením pořadí, v jakém jsou některé záznamy vraceny, může CoreDNS zlepšit DNS-based vyvažování zátěže metodou round-robin.
- Lepším procházením jednotlivých přípon vyhledávacích domén definovaných v resolv.conf, funkce nazvaná autopath může zrychlit dobu odezvy DNS při překladu externích názvů hostitelů.
- I když pod neexistuje, kube-dns 10.32.0.125.namespace.pod.cluster.local vždy přeloží na 10.32.0.125. CoreDNS nabízí režim validace podů, který provede překlad pouze v případě, že existuje pod se správnou IP adresou a jmenným prostorem.
Chcete-li si rozšířit znalosti o Kubernetes endpoints, autopaths, a wildcards, podívejte se na návod na jak Kubernetes umožňuje čtení zónových dat ze svého clusteru.
Možnosti přizpůsobení
Kubernetes umožňuje konfigurovat DNS pody a přizpůsobit překlad DNS v clusteru, a to díky službě přizpůsobení DNS v KubernetesAdministrátoři mohou tyto služby využít ke změně nadřazených jmenných serverů (upstream nameservers) nebo přípon vyhledávacích domén definovaných v resolv.conf. Kromě toho je k dispozici doplňková funkce pro personalizaci podů a kontejnerů pomocí volby dnsConfig :

Aktualizace této konfigurace vynutí přepsání souboru resolv.conf, což umožní projevení změn. Výše uvedené nastavení vytvoří soubor obsahující řádky nameserver 203.0.113.44 a search custom.dns.local, což se přímo přenáší do běžných voleb resolv.conf .
Závěr
V tomto návodu jsme vás provedli základy služby Kubernetes DNS a její implementací v různých verzích. Na příkladu jsme si také ukázali DNS záznamy v Kubernetes. Dále jsme zdůraznili některé další možnosti konfigurace pro přizpůsobení podů a překlad DNS dotazů. Tímto jsme pokryli základy služby Kubernetes DNS, ale vaše učení by zde končit nemělo. Podívejte se na oficiální dokumentaci Kubernetes, abyste se o tomto tématu dozvěděli více.
Chcete-li si dále rozšířit své znalosti DevOps a ponořit se do základů Kubernetes, podívejte se na následující návody na našem blogu:
- Úvod do Helm: Správce balíčků pro Kubernetes
- Jak nainstalovat a používat Kubernetes na Ubuntu 20.04
- Nasazení PHP aplikace na Kubernetes cluster s Ubuntu 18.04
Příjemnou práci!
Komentáře
Zatím žádné komentáře. Buďte první.