Wyszukiwanie w witrynie

Jak wdrożyć Nginx w klastrze Kubernetes


W naszym ostatnim artykule omówiliśmy, jak skonfigurować i uruchomić klaster Kubernetes, porozmawiajmy o tym, jak możemy wdrożyć usługę NGINX w naszym klastrze.

Uruchomię to wdrożenie na maszynie wirtualnej hostowanej przez dostawcę chmury publicznej. Podobnie jak w przypadku wielu usług chmury publicznej, wiele z nich na ogół utrzymuje publiczny i prywatny schemat adresu IP dla swoich maszyn wirtualnych.

Środowisko testowe

Master Node - Public IP: 104.197.170.99 and Private IP: 10.128.15.195
Worker Node 1 - Public IP: 34.67.149.37 and Private IP: 10.128.15.196
Worker Node 2 - Public IP: 35.232.161.178 and Private IP: 10.128.15.197

Wdrażanie NGINX w klastrze Kubernetes

To wdrożenie uruchomimy z węzła głównego.

Zacznijmy od sprawdzenia statusu klastra. Wszystkie Twoje węzły powinny być w stanie READY.

kubectl get nodes

Tworzymy wdrożenie NGINX przy użyciu obrazu NGINX.

kubectl create deployment nginx --image=nginx

Możesz teraz zobaczyć stan wdrożenia.

kubectl get deployments

Jeśli chcesz zobaczyć więcej szczegółów na temat swojego wdrożenia, możesz uruchomić polecenie opisz. Można na przykład określić, ile replik wdrożenia jest uruchomionych. W naszym przypadku spodziewamy się repliki 1 działającej (tj. replik 1/1).

kubectl describe deployment nginx

Teraz, gdy wdrożenie Nginx jest aktywne, możesz chcieć udostępnić usługę NGINX publicznemu adresowi IP dostępnemu w Internecie.

Udostępnianie Twojej usługi Nginx w sieci publicznej

Kubernetes oferuje kilka opcji udostępniania usługi w oparciu o funkcję zwaną typami usług Kubernetes i są to:

  1. ClusterIP – ten typ usługi zazwyczaj udostępnia usługę pod wewnętrznym adresem IP, osiągalnym tylko w klastrze i prawdopodobnie tylko w węzłach klastra.
  2. NodePort – jest to najbardziej podstawowa opcja udostępniania usługi poza klastrem, na określonym porcie (zwanym NodePort) w każdym węźle w klastrze. Wkrótce przedstawimy tę opcję.
  3. LoadBalancer – ta opcja wykorzystuje zewnętrzne usługi równoważenia obciążenia oferowane przez różnych dostawców, aby umożliwić dostęp do Twojej usługi. Jest to bardziej niezawodna opcja, jeśli chodzi o wysoką dostępność Twojej usługi i oferuje więcej funkcji poza dostępem domyślnym.
  4. Nazwa zewnętrzna – ta usługa przekierowuje ruch do usług spoza klastra. W związku z tym usługa jest mapowana na nazwę DNS, która może być hostowana poza klastrem. Należy zauważyć, że nie wykorzystuje to proxy.

Domyślny typ usługi to ClusterIP.

W naszym scenariuszu chcemy użyć typu usługi NodePort, ponieważ mamy zarówno publiczny, jak i prywatny adres IP i na razie nie potrzebujemy zewnętrznego modułu równoważenia obciążenia. W przypadku tego typu usługi Kubernetes przypisze tę usługę do portów z zakresu 30000+.

kubectl create service nodeport nginx --tcp=80:80

Uruchom polecenie get svc, aby zobaczyć podsumowanie usługi i odsłoniętych portów.

kubectl get svc

Teraz możesz sprawdzić, czy strona Nginx jest osiągalna na wszystkich węzłach za pomocą polecenia curl.

curl master-node:30386
curl node-1:30386
curl node-2:30386

Jak widać, strona „Witamy w NGINX!” jest już dostępna.

Dotarcie do tymczasowych PUBLICZNYCH adresów IP

Jak zapewne zauważyłeś, Kubernetes zgłasza, że nie mam zarejestrowanego aktywnego publicznego adresu IP, ani raczej żadnego zarejestrowanego ZEWNĘTRZNEGO adresu IP.

kubectl get svc

Sprawdźmy czy rzeczywiście jest prawdą, że nie mam podłączonego ZEWNĘTRZNEGO adresu IP do moich interfejsów za pomocą polecenia IP.

ip a

Jak widać, brak publicznego adresu IP.

Jak wspomniałem wcześniej, obecnie prowadzę to wdrożenie na maszynie wirtualnej oferowanej przez dostawcę chmury publicznej. Tak więc, chociaż nie ma konkretnego interfejsu przypisanego publicznego adresu IP, dostawca maszyny wirtualnej przyznał efemeryczny zewnętrzny adres IP.

Efemeryczny zewnętrzny adres IP to tymczasowy adres IP, który pozostaje podłączony do maszyny wirtualnej do momentu zatrzymania instancji wirtualnej. Po ponownym uruchomieniu instancji wirtualnej przypisywany jest nowy zewnętrzny adres IP. Krótko mówiąc, jest to prosty sposób dla dostawców usług na wykorzystanie bezczynnych publicznych adresów IP.

Wyzwanie w tym przypadku, poza faktem, że Twój publiczny adres IP nie jest statyczny, polega na tym, że Efemeryczny publiczny adres IP jest po prostu rozszerzeniem (lub serwerem proxy) prywatnego adresu IP i z tego powodu usługa będzie będzie dostępny tylko na porcie 30386. Oznacza to, że dostęp do usługi będzie możliwy pod adresem URL , czyli 104.197.170.99:30386, który jeśli zaznaczysz w przeglądarce powinna być widoczna strona powitalna.

Dzięki temu pomyślnie wdrożyliśmy NGINX w naszym 3-węzłowym klastrze Kubernetes.