Jak wystawiać porty w Kubernetes?

Jak wystawiać porty w Kubernetes?

W przypadku usług Kubernetes dostępne są różne odrębne konfiguracje portów, w tym port, docelowyport i nodeport. Usługa Kubernetes jest dostępna za pośrednictwem wybranego portu klastra, a inne kapsuły mogą komunikować się z tym serwerem za pomocą skonfigurowanego portu. W Targetport usługa wyśle ​​żądania, a kapsuły będą ich słuchać. Ten port będzie również musiał być otwarty dla aplikacji kontenera. Jeśli pole portu nie jest dostarczane, Nodeport jest domyślnie używany. W tym artykule omówimy, jak ujawnić porty w Kubernetes. Musisz zrozumieć kapsułkę i rozmieszczenie, aby śledzić praktyczne ćwiczenia na ten temat.

Upewnij się, że masz zainstalowany kubectl. Będziesz także potrzebował klastra Kubernetes, a także narzędzia linii poleceń Kubectl skonfigurowane do łączenia się z nim. Aby rozpocząć, otwórz klaster minikube, który jest zainstalowany na Ubuntu 20.04 LTS OS. Aby uruchomić miniKube, wykonaj polecenie minikube start w wierszu poleceń.

Utwórz plik za pomocą polecenia dotykowego.

Kapsuła.Plik YAML jest tworzony, jak pokazano na towarzyszącym zrzucie ekranu.

Teraz zrób kapsułkę Nginx z następującą specyfikacją portu kontenera:

W rezultacie można uzyskać do niego dostęp z dowolnego węzła w klastrze. Zbadaj węzły, na których działają kapsułki, i użyj poniższych poleceń.

Aby zobaczyć pełny status kapsuł Kubernetes, możesz uruchomić polecenie GET POD, jak wspomniano poniżej.

Z poleceniem pokazanym na zrzucie ekranu możesz sprawdzić adresy IP swoich kapsułek.

Możesz ssh w dowolnym węźle, który jest obecny w klastrze i zwinąć oba adresy IP. Warto zauważyć, że kontenery nie używają portu 80 w węźle i nie ma żadnych konkretnych zasad NAT, aby skierować ruch do POD. Oznacza to, że możesz uruchomić wiele kapsuł Nginx w tym samym węźle, każdy z portem kontenerowym, i uzyskać dostęp do IP z dowolnego innego kapsułki lub węzła w klastrze. Porty mogą być nadal narażone na interfejsy węzła hosta, podobnie jak Docker, chociaż wymóg ten jest znacznie zmniejszony z powodu modelu sieciowego.

Jak utworzyć usługę?

Tak więc na płaskiej przestrzeni adresowej całego klastra mamy kapsuły wykonujące Nginx. Możesz teoretycznie komunikować się bezpośrednio z tymi strąkami, ale co się stanie, jeśli jeden z nich umrze? W rezultacie strąki zginą, a wdrożenie wygeneruje nowe z alternatywnymi adresami IP. Problem, który rozwiązuje usługa, jest ten.

Usługa Kubernetes to logiczny zestaw kapsuł, które wszystkie wykonują to samo zadanie i działają gdzieś w klastrze. Po utworzeniu usługi otrzymuje określony adres IP, a ten adres jest ustalony w całym życiu usługi i nie zmieni. Krągi można ustawić do komunikacji z usługą, z pewnością, że komunikacja zostanie zrównoważona obciążeniem z podjazdem serwisowym. Dzięki Kubectl Expose możesz zbudować usługę dla dwóch replików nginx:

Zestaw kapsułek obsługuje usługę. Punkty końcowe zapewniają dostęp do tych strąków. Wybór usługi będzie regularnie oceniany, a wyniki opublikowane w obiekcie punktów końcowych o nazwie My-Nginx. Jeśli strąka umrze, jest oddzielona od punktów końcowych. Następnie zastępuje go nowe kapsuły tym samym selektorem.

Jak uzyskać dostęp do usługi?

Zmienne środowiskowe i DNS to dwie podstawowe metody znajdowania usługi w Kubernetes. Ten pierwszy wymaga dodatku do klastra Coredns, podczas gdy drugi nie.

Zmienne środowiska

Kubelet tworzy zbiór zmiennych środowiskowych dla każdej bieżącej usługi, gdy kapsułka rozpoczyna się w węźle. W rezultacie może wystąpić trudność w procesie zamówienia. Zbadaj środowisko swoich działających strąków Nginx (nazwa twojego kapsuły będzie się różnić), aby zrozumieć, dlaczego:

$ Kubectl Exec my-Nginx-3800858182-Jr4a2-Printenv | Usługa GREP

Warto zauważyć, że twoja usługa nie jest wspomniana. Ponieważ wykonałeś repliki przed usługą, tak jest. Ten krok może obniżyć całą usługę, jeśli to nie zadziałało. Niszcząc dwa strąki i czekając na wdrożenie ich odtworzenia, możemy poprawnie wykonać zadanie. Tym razem usługa jest obecna przed replikami. Zapewni to rozprzestrzenianie się usług na poziomie harmonogramu dla twoich kapsuł, a także odpowiednie zmienne środowiskowe:

DNS

Kubernetes ma usługę Addon DNS Cluster, która automatycznie przypisuje nazwy DNS do innych usług. Możesz sprawdzić, czy działa w Twoim klastrze, wykonując następujące polecenie:

$ kubectl get Services Kube-DNS --Namespace = Kube-System

Wniosek

W tym artykule dowiedziałeś się, że w przypadku usług Kubernetes dostępne są różne odrębne konfiguracje portów, w tym port, docelowyport i nodeport. Ponadto zawarliśmy pełny opis, w jaki sposób można z powodzeniem ujawnić porty w Kubernetes.