Najlepsze praktyki Kubernetes. Mapowanie zewnętrznych usług

Najlepsze praktyki Kubernetes. Tworzenie małych kontenerów
Najlepsze praktyki Kubernetes. Organizacja Kubernetes z przestrzenią nazw
Najlepsze praktyki Kubernetes. Sprawdzanie żywotności Kubernetes za pomocą testów Readiness i Liveness
Najlepsze praktyki Kubernetes. Konfiguracja żądań i limitów zasobów
Najlepsze praktyki Kubernetes. Prawidłowe wyłączanie Terminate

Jeśli jesteś jak większość ludzi, prawdopodobnie korzystasz z zasobów działających poza swoim klastrem. Możliwe, że używasz API Taleo do wysyłania wiadomości tekstowych lub analizujesz obrazy za pomocą API Google Cloud Vision.

Jeśli korzystasz z tego samego punktu końcowego — punktu odbioru zapytań po stronie serwera we wszystkich swoich środowiskach i nie planujesz przenosić swoich serwerów do Kubernetes, to całkowicie w porządku jest mieć punkt końcowy usługi bezpośrednio w swoim kodzie. Istnieje jednak wiele innych scenariuszy rozwoju wydarzeń. W tej serii 'Kubernetes Best Practices' dowiesz się, jak wykorzystać wbudowane mechanizmy Kubernetes do odkrywania usług zarówno wewnątrz, jak i na zewnątrz klastra.

Jako przykład powszechnie używanej zewnętrznej usługi można podać bazę danych działającą poza klastrem Kubernetes. W przeciwieństwie do takich baz danych w chmurze, jak Google Cloud Data Store czy Google Cloud Spanner, które używają jednego punktu końcowego do wszystkich rodzajów dostępu, większość baz danych ma oddzielne punkty końcowe dla różnych sytuacji.
Najlepsze praktyki w korzystaniu z tradycyjnych baz danych, takich jak MySQL i MongoDB, zazwyczaj zakładają, że łączysz się z różnymi komponentami dla różnych środowisk. Możesz mieć większą maszynę dla danych produkcyjnych i mniejszą maszynę dla środowiska testowego. Każda z nich będziesz miała swoje adresy IP lub nazwy domen, ale z pewnością nie chciałbyś zmieniać swojego kodu, przechodząc z jednego środowiska do drugiego. Dlatego zamiast twardego kodowania tych adresów możesz skorzystać z wbudowanej w Kubernetes usługi odkrywania zewnętrznych usług opartych na DNS, dokładnie tak samo, jak w przypadku natywnych usług Kubernetes.

Najlepsze praktyki Kubernetes. Mapowanie zewnętrznych usług

Załóżmy, że uruchamiasz bazę danych MongoDB w Google Compute Engine. Utkniesz w tym hybrydowym świecie, dopóki nie uda ci się przenieść jej do klastra.

Na szczęście możesz skorzystać ze statycznych usług Kubernetes, aby choć trochę ułatwić sobie życie. W tym przykładzie stworzyłem serwer MongoDB za pomocą Google Cloud Launcher. Ponieważ został on utworzony w tej samej sieci (lub VPC klastra Kubernetes), dostęp do niego odbywa się za pomocą wydajnego wewnętrznego adresu IP.

Najlepsze praktyki Kubernetes. Mapowanie zewnętrznych usług

W Google Cloud to ustawienie jest domyślne, więc nie musisz nic konfigurować. Teraz, gdy mamy adres IP, pierwszym krokiem jest stworzenie usługi. Można zauważyć, że dla tej usługi nie ma żadnych selektorów podów. Oznacza to, że stworzyliśmy usługę, która nie będzie wiedzieć, gdzie kierować ruch. Umożliwi to ręczne stworzenie obiektu endpoint, który będzie odbierał ruch z tej usługi.

Najlepsze praktyki Kubernetes. Mapowanie zewnętrznych usług

Następny przykład kodu pokazuje, że punkty końcowe określają adres IP dla bazy danych, używając tej samej nazwy mongo, co usługa.

Najlepsze praktyki Kubernetes. Mapowanie zewnętrznych usług

Kubernetes będzie używać wszystkich adresów IP, aby znaleźć punkty końcowe, jakby były zwykłymi podami Kubernetes, więc teraz możesz uzyskać dostęp do bazy danych za pomocą prostego ciągu połączenia do powyższej nazwy mongodb://mongo. Przy tym nie ma potrzeby używania adresów IP w swoim kodzie.

Jeśli w przyszłości adresy IP się zmienią, można po prostu zaktualizować punkty końcowe za pomocą nowego adresu IP, a twoje aplikacje nie muszą być w żaden sposób zmieniane.

Jeśli używasz bazy danych umieszczonej na zewnętrznym hoście, prawdopodobnie właściciele hosta dostarczyli ci do połączenia zunifikowany identyfikator zasobu URI. Jeśli więc otrzymałeś adres IP, można po prostu skorzystać z poprzedniej metody. Ten przykład pokazuje, że mam dwie bazy danych MongoDB umieszczone na hoście mLab.

Najlepsze praktyki Kubernetes. Mapowanie zewnętrznych usług

Jedna z nich to baza danych dla deweloperów, a druga to baza produkcyjna. Ciągi połączenia dla tych baz danych wyglądają następująco — mLab dostarcza ci dynamiczny URI i dynamiczny port. Jak widać, są różne.

Najlepsze praktyki Kubernetes. Mapowanie zewnętrznych usług

Aby się od tego abstrahować, używamy Kubernetes i łączymy się z bazą danych deweloperów. Możesz stworzyć zewnętrzną nazwę usługi Kubernetes, która dostarczy ci statyczną usługę, która będzie kierować ruch do zewnętrznej usługi.

Najlepsze praktyki Kubernetes. Mapowanie zewnętrznych usług

Ta usługa wykona prostą przekierowanie CNAME na poziomie jądra, co będzie miało minimalny wpływ na wydajność. Dzięki temu możesz używać prostszego ciągu połączenia.

Najlepsze praktyki Kubernetes. Mapowanie zewnętrznych usług

Jednak ponieważ zewnętrzna nazwa używa przekierowania CNAME, nie może ona wykonać przekierowania portów. Dlatego to rozwiązanie jest stosowane tylko dla statycznych portów i nie może być używane z dynamicznymi portami. Jednak darmowy plan mLab Free Tier domyślnie przydziela użytkownikowi dynamiczny numer portu i nie można tego zmienić. Oznacza to, że dla dev i prod potrzebne są różne ciągi poleceń do łączenia. Słabością jest to, że numer portu będzie musiał być zakodowany na sztywno. Jak więc sprawić, by przekierowanie portów działało?

Pierwszym krokiem jest uzyskanie adresu IP z URI. Wykonując polecenie nslookup, hostname lub pingując URI, można uzyskać adres IP bazy danych. Jeśli przy tym usługa zwraca wiele adresów IP, można używać wszystkich tych adresów w punktach końcowych obiektu.

Najlepsze praktyki Kubernetes. Mapowanie zewnętrznych usług

Należy pamiętać, że adresy IP URI mogą się zmieniać bez wcześniejszego powiadomienia, dlatego używanie ich w prod jest dość ryzykowne. Taki adres IP pozwala na połączenie z zdalną bazą danych bez wskazywania portu. W ten sposób usługa Kubernetes dość przejrzyście realizuje przekierowanie portów.

Najlepsze praktyki Kubernetes. Mapowanie zewnętrznych usług

Mapowanie, czyli przypisywanie zasobów zewnętrznych do wewnętrznych, daje możliwość elastycznego wykorzystania tych usług w klastrze w przyszłości przy minimalnym wysiłku związanym z refaktoryzacją. Ułatwia to również zarządzanie i daje zrozumienie, z jakich zewnętrznych usług korzysta twoja firma.

Ciąg dalszy wkrótce…

Odtwarzaj wideo

Trochę reklamy 🙂

Dziękujemy, że jesteś z nami. Podobają Ci się nasze artykuły? Chcesz zobaczyć więcej interesujących materiałów? Wspieraj nas składając zamówienie lub polecając nas znajomym, chmurowe VPS dla programistów od 4,99 $, unikatowy odpowiednik serwerów entry-level, który został stworzony przez nas dla Ciebie: Cała prawda o VPS (KVM) E5-2697 v3 (6 rdzeni) 10GB DDR4 480GB SSD 1Gbps od 19 $ lub jak prawidłowo podzielić serwer? (dostępne opcje z RAID1 i RAID10, do 24 rdzeni i do 40GB DDR4).

Dell R730xd dwa razy tańszy w centrum danych Equinix Tier IV w Amsterdamie? Tylko u nas 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100TB od 199 dolarów w Holandii! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — od 99 dolarów! Czytaj o tym Jak zbudować infrastrukturę klasy korporacyjnej z zastosowaniem serwerów Dell R730xd E5-2650 v4 kosztujących 9000 euro za grosze?

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster