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:
|
1 2 3 |
nameserver 10.32.0.10 search namespace.svc.cluster.local svc.cluster.local cluster.local options ndots:5 |
-
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:
|
1 |
_port-name._protocol.service.namespace.svc.cluster.local |
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:
|
1 |
other-service |
Dodaj other-service do zapytania, jeśli usługa znajduje się w innej przestrzeni nazw:
|
1 |
other-service.other-namespace |
Będziesz musiał użyć co najmniej następujących elementów, jeśli odwołujesz się do poda:
|
1 |
pod-ip.other-namespace.pod |
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.
-
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.
-
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 :

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:
- Wprowadzenie do Helm: menedżer pakietów dla Kubernetes
- Jak zainstalować i używać Kubernetes na Ubuntu 20.04
- Wdrażanie aplikacji PHP w klastrze Kubernetes z Ubuntu 18.04
Miłego korzystania!
Komentarze
Brak komentarzy. Bądź pierwszy.