Powrót do bloga

Usługa DNS Kubernetes: Przewodnik dla początkujących

Usługa DNS Kubernetes: Przewodnik dla początkujących

Kubernetes, znany również jako K8s, to otwartoźródłowy system orkiestracji służący do automatyzacji wdrażania, skalowania i zarządzania konteneryzowanymi aplikacjami. Jego przenośność, elastyczność i możliwości automatycznego skalowania sprawiają, że jest to szeroko stosowany system. Ponad wszystkie wyróżniające się funkcje, opcja tworzenia rekordów DNS dla usług i podów czyni go bezkonkurencyjnym w porównaniu z innymi systemami oprogramowania. Usługa DNS w Kubernetes pozwala na komunikowanie się z usługami za pomocą spójnych nazw DNS zamiast adresów IP.

Wymagania wstępne

Aby jak najlepiej wykorzystać ten samouczek i lepiej zrozumieć usługę DNS w Kubernetes, odśwież swoją wiedzę na temat podstaw Kubernetes. Skorzystasz również na przeczytaniu Przeglądu terminologii, komponentów i pojęć DNS aby lepiej zrozumieć pojęcia związane z DNS. Ponadto, przegląd ekosystemu Docker oraz podstawy technologii konteneryzacji będą dodatkowym, dużym atutem.

Czym jest system DNS?

Domain Name System (DNS) to mechanizm powiązania różnego rodzaju informacji z łatwymi do zapamiętania nazwami, takimi jak adresy IP. Korzystanie z systemu DNS do tłumaczenia żądanych nazw na adresy IP ułatwia użytkownikom końcowym bezproblemowe dotarcie do docelowej nazwy domeny. Większość klastrów Kubernetes zawiera wewnętrzną usługę DNS, skonfigurowaną domyślnie w celu zaoferowania lekkiego podejścia do wykrywania usług (service discovery). Nawet gdy pody i usługi są tworzone, usuwane lub przenoszone między węzłami, wbudowane wykrywanie usług ułatwia aplikacjom identyfikację i komunikację z klastrami Kubernetes.

W ostatnich wersjach Kubernetes, szczegóły techniczne usługi DNS w Kubernetes uległy zmianie. Ten samouczek ma na celu przedstawienie zarówno implementacji kube-dns, jak i CoreDNS usługi DNS w Kubernetes. Szczegółowo omówimy rekordy DNS w Kubernetes i zademonstrujemy, jak działa DNS w Kubernetes.

Co wchodzi w skład usługi DNS w Kubernetes?

Przed wydaniem wersji 1.11 usługa DNS w Kubernetes opierała się na kube-dns. Jednak bezpieczeństwo i prywatność nadal stanowiły poważny problem. Później, w nowej wersji 1.11, społeczność Kubernetes wprowadziła CoreDNS, aby rozwiązać problemy z bezpieczeństwem i stabilnością kube-dns.

Niezależnie od tego, której wersji oprogramowania używasz do obsługi rekordów DNS, kube-dns i CoreDNS działają w podobny sposób:

  • Usługa kube-dns oraz jeden lub więcej podów są tworzone.
  • Usługa kube-dns monitoruje API Kubernetes pod kątem zdarzeń związanych z usługami i punktami końcowymi (endpoints) i odpowiednio zmienia swoje wpisy DNS. Gdy modyfikujesz te usługi Kubernetes i powiązane z nimi pody poprzez operacje tworzenia, edycji lub usuwania, zdarzenia te są wyzwalane automatycznie.
  • Kubelet przypisuje adres IP klastra usługi kube-dns do opcji etc/resolv.conf nameserver każdego nowego poda, wraz z odpowiednimi ustawieniami search w celu umożliwienia stosowania krótszych nazw hostów:
  • Konteneryzowane aplikacje mogą następnie rozwiązywać nazwy hostów, takie jak example-service.namespace na odpowiedni adres IP klastra.

Przegląd rekordów DNS w Kubernetes

Przyjrzyjmy się bliżej rekordom DNS w Kubernetes na przykładzie. Pełny rekord DNS A dla usługi Kubernetes będzie wyglądał następująco:

service.namespace.svc.cluster.local

Pod posiadałby rekord w tym formacie, który reprezentowałby rzeczywisty adres IP poda:

10.32.0.125.namespace.pod.cluster.local

Ponadto tworzone są rekordy SRV dla określonych portów usługi Kubernetes:

W rezultacie Twoja aplikacja lub mikrousługa może odpytywać prostą i spójną nazwę hosta, aby dotrzeć do innych usług lub podów w klastrze, dzięki wbudowanemu mechanizmowi wykrywania usług opartemu na DNS.

Rozwiązywanie krótszych nazw hostów i przeszukiwanie domen

Nie zawsze będziesz musiał używać pełnej nazwy hosta, aby uzyskać dostęp do innej usługi, ze względu na sufiksy domen wyszukiwania ustawione w resolv.conf pliku. Jeśli kontaktujesz się z usługą w tej samej przestrzeni nazw, możesz po prostu wywołać ją po jej nazwie:

Dodaj other-service do zapytania, jeśli usługa znajduje się w innej przestrzeni nazw:

Będziesz musiał użyć co najmniej następujących elementów, jeśli odwołujesz się do poda:

Tylko sufiksy .svc są automatycznie uzupełniane w domyślnym pliku resolv.conf . Dlatego konieczne jest określenie ustawień aż do .pod. Następnie omówmy zawiłości dwóch alternatywnych implementacji DNS w Kubernetes, o których dowiedzieliśmy się do tej pory.

Implementacja DNS w Kubernetes

Kubernetes w wersji 1.11 dostarczył nowe oprogramowanie do zarządzania usługą kube-dns , jak wspomniano w poprzedniej sekcji. Głównym powodem nowej aktualizacji była poprawa wydajności i bezpieczeństwa usługi. Zacznijmy od integracji kube-dns od samego początku.

  1. kube-dns

W poprzedniej wersji Kubernetes 1.11 usługa kube-dns miała trzy kontenery działające w podzie kube-dns w przestrzeni nazw kube-system . Przyjrzyj się poniższym trzem kontenerom:

  • kube-dns: kontener, który uruchamia SkyDNS i działa jako usługa rozwiązywania zapytań DNS.
  • dnsmasq: Odpowiedzi SkyDNS są buforowane przez dnsmasq, popularny, lekki program do rozwiązywania nazw DNS i pamięć podręczną.
  • sidecar: kontener pomocniczy (sidecar) po stronie usługi, który raportuje metryki i reaguje na testy sprawności (health checks).

CoreDNS powstał w wyniku luk bezpieczeństwa w Dnsmasq oraz obaw dotyczących wydajności i skalowalności SkyDNS.

  1. CoreDNS

Jako nowa usługa DNS w Kubernetes, CoreDNS został podniesiony do statusu General Availability w Kubernetes 1.11. Oznacza to, że jest gotowy do użycia produkcyjnego i będzie używany przez wiele narzędzi instalacyjnych oraz dostawców zarządzanego Kubernetes jako domyślna usługa DNS klastra.

CoreDNS to elastyczny i rozszerzalny serwer DNS, który działa jako DNS klastra Kubernetes. Spełnia wszystkie funkcje poprzedniego systemu. Kontener DNS odpowiada za rozwiązywanie i buforowanie zapytań DNS. CoreDNS odpowiada na testy sprawności i dostarcza metryki w jednym kontenerze. Ponadto eliminuje kilka drobnych wad i zapewnia nowe możliwości rozwiązywania problemów z wydajnością i bezpieczeństwem:

  • Rozwiązano niektóre konflikty między użyciem stubDomains a usługami zewnętrznymi.
  • Poprzez losową kolejność zwracania niektórych wpisów, CoreDNS może usprawnić oparte na DNS równoważenie obciążenia typu round-robin.
  • Dzięki lepszemu iterowaniu po każdym z sufiksów domen wyszukiwania zdefiniowanych w resolv.conf, funkcja o nazwie autopath może skrócić czas odpowiedzi DNS podczas rozwiązywania zewnętrznych nazw hostów.
  • Nawet jeśli pod nie istnieje, kube-dns 10.32.0.125.namespace.pod.cluster.local zawsze rozwiąże się do 10.32.0.125. CoreDNS oferuje tryb walidacji podów, który rozwiąże nazwę tylko wtedy, gdy istnieje pod o prawidłowym adresie IP i przestrzeni nazw.

Aby poszerzyć swoją wiedzę na temat Kubernetes endpoints, autopaths, oraz wildcards, zapoznaj się z samouczkiem dotyczącym tego, jak Kubernetes umożliwia odczytywanie danych strefy ze swojego klastra.

Funkcje dostosowywania

Kubernetes pozwala na konfigurację podów DNS i dostosowanie rozwiązywania nazw DNS w klastrze, dzięki usłudze customizing DNS serviceAdministratorzy mogą wykorzystać te usługi do zmiany nadrzędnych serwerów nazw lub sufiksów domen wyszukiwania zdefiniowanych w resolv.conf. Przede wszystkim dostępna jest dodatkowa funkcja personalizacji podów i kontenerów za pomocą opcji dnsConfig :

Kubernetes DNS Demo Pod Yaml

Aktualizacja tej konfiguracji wymusi ponowne zapisanie pliku resolv.conf, co pozwoli na wejście zmian w życie. Powyższa konfiguracja utworzy plik zawierający linie nameserver 203.0.113.44 oraz search custom.dns.local, co przenosi się bezpośrednio na standardowe opcje resolv.conf .

Podsumowanie

W tym samouczku przeprowadziliśmy Cię przez podstawy usługi DNS w Kubernetes oraz jej implementację w różnych wersjach. Omówiliśmy również rekordy DNS w Kubernetes na konkretnym przykładzie. Dodatkowo wyróżniliśmy kilka dodatkowych opcji konfiguracyjnych służących do dostosowywania podów i rozwiązywania zapytań DNS. Obejmuje to podstawy usługi DNS w Kubernetes, ale Twoja nauka nie powinna się na tym kończyć. Sprawdź oficjalną dokumentację Kubernetes, aby dowiedzieć się więcej na ten temat.

Aby poszerzyć swoją wiedzę o DevOps i zgłębić podstawy Kubernetes, zapoznaj się z poniższymi samouczkami na naszym blogu:

Miłego korzystania!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev jest projektantem kreatywnym w CloudSigma, skupiającym się na spójnej tożsamości biznesowej przy wykorzystaniu tradycyjnych i innowacyjnych kanałów marketingowych. Biegle łączy wizję artystyczną ze strategicznym marketingiem, tworząc wywierające wpływ narracje marki.

Komentarze

Brak komentarzy. Bądź pierwszy.