Sieć Kubernetes - kompleksowy przewodnik po koncepcjach sieci w Kubernetes



Ten blog o Kubernetes Networking zagłębia się w koncepcje związane z Kubernetes, takie jak komunikacja z podami, usługami i sieciami przychodzącymi.

W poprzednim blogu na , musisz znać Kubernetes. Na tym blogu o sieciach Kubernetes skupię się przede wszystkim na koncepcjach sieciowych związanych z Kubernetesem.

Na tym blogu o Kubernetes Networking zrozumiesz następujące tematy:





Co to jest Kubernetes?

Możesz zdefiniować Kubernetes jako narzędzie do orkiestracji kontenerów typu open source, które zapewnia przenośną platformę do automatyzacji wdrażania aplikacji kontenerowych.

Teraz każdy, kto pracuje z Kubernetes, musi dobrze rozumieć klaster Kubernetes, ponieważ pomoże ci to zrozumieć Kubernetes Networking.



Klaster Kubernetes

Platforma Kubernetes oferuje zarządzanie pożądanym stanem, które umożliwia uruchamianie usług klastra na podstawie konfiguracji w infrastrukturze. Pozwólcie, że wyjaśnię na przykładzie.

Rozważ plik YAML, który zawiera wszystkie informacje konfiguracyjne, które należy wprowadzić do usług klastra. Tak więc ten plik jest przekazywany do interfejsu API usług klastra, a następnie usługi klastra będą musiały dowiedzieć się, jak zaplanować pody w środowisku. Załóżmy więc, że istnieją dwa obrazy kontenera dla zasobnika 1 z trzema replikami i jeden obraz kontenera dla zasobnika 2 z dwiema replikami, do usług klastra będzie należało przydzielenie tych par replik pod-replikom do pracowników.

c ++, jak używać przestrzeni nazw

Klaster Kubernetes - Kubernetes Networking - Edureka



Zobacz powyższy schemat. Jak widać, usługi klastra przydzieliły pierwszemu pracownikowi dwie pary replik poda, drugiemu pracownikowi jedną parę replik poda, a trzeciemu pracownikowi dwie pary replik. Teraz to proces Kubelet jest odpowiedzialny za komunikację usług klastra z pracownikami.

Tak więc składa się na to cała konfiguracja usług klastrowych i samych pracowników Klaster Kubernetes !!

Jak myślisz, jak te indywidualnie przydzielone kapsułki komunikują się ze sobą?

Odpowiedź tkwi w Kubernetes Networking!

Zasubskrybuj nasz kanał YouTube, aby otrzymywać nowe aktualizacje ..!

Istnieją głównie 4 problemy do rozwiązania za pomocą koncepcji sieci.

  • Komunikacja między kontenerami
  • Komunikacja od pod do pod
  • Pod do obsługi komunikacji
  • Komunikacja zewnętrzna do usług

Teraz powiem ci, jak powyższe problemy są rozwiązane za pomocą Kubernetes Networking.

Sieć Kubernetes

Komunikacja między podami, usługami i usługami zewnętrznymi z tymi w klastrze wprowadza koncepcję sieci Kubernetes.

Tak więc, dla lepszego zrozumienia, podzielę te pojęcia na następujące.

  • Komunikacja w strąkach i kontenerach
  • Usługi
  • Łączenie się z usługami zewnętrznymi za pośrednictwem sieci Ingress

Komunikacja w strąkach i kontenerach

Zanim powiem ci, w jaki sposób komunikują się strąki, pozwól, że przedstawię ci, czym są strąki?

Strąki

Pody to podstawowe jednostki aplikacji Kubernetes, które składają się z co najmniej jednego kontenera przydzielonego na tym samym hoście w celu współdzielenia stosu sieciowego i innych zasobów. Oznacza to, że wszystkie kontenery w kapsule mogą dotrzeć do innych na lokalnym hoście.

A teraz pozwól, że wyjaśnię ci, jak komunikują się te kapsułki?

Istnieją 2 rodzaje komunikacji. Plik komunikacja między węzłami i komunikacja wewnątrz węzłów.

Zacznijmy więc od komunikacji wewnątrz węzłów, ale wcześniej pozwólcie, że przedstawię wam składniki sieci podów.

Węzeł w ramach sieci

Sieć podów między węzłami to w zasadzie komunikacja między dwoma różnymi węzłami w tym samym pod. Pozwólcie, że wyjaśnię na przykładzie.

Załóżmy, że pakiet przechodzi z pod1 do pod2.

  • Pakiet opuszcza sieć Pod 1 pod adresem eth0 i wchodzi do sieci głównej pod adresem veth0
  • Następnie pakiet przechodzi przez most linuksowy (cbr0), który wykrywa miejsce docelowe za pomocą żądania ARP
  • Tak więc, jeśli veth1 ma adres IP, most wie teraz, gdzie przekazać pakiet.

Teraz, podobnie powiem ci o komunikacji między węzłami.

Chcesz poznać Kubernetes?
Węzeł w sieci

Rozważ dwa węzły z różnymi sieciowymi przestrzeniami nazw, interfejsami sieciowymi i mostem linuksowym.

Teraz załóżmy, że pakiet podróżuje z pod1 do pod4, który znajduje się w innym węźle.

  • Pakiet opuszcza sieć pod 1 i wchodzi do sieci głównej pod adresem veth0
  • Następnie pakiet jest przekazywany do mostka linuksowego (cbr0), którego zadaniem jest wysłanie żądania ARP w celu znalezienia miejsca docelowego.
  • Gdy most zorientuje się, że ten pod nie ma adresu docelowego, pakiet wraca do głównego interfejsu sieciowego eth0.
  • Pakiet opuszcza teraz węzeł 1, aby znaleźć miejsce docelowe w innym węźle i wchodzi do tabeli tras, która kieruje pakiet do węzła, którego blok CIDR zawiera pod4.
  • Tak więc pakiet dociera teraz do węzła node2, a następnie most przyjmuje pakiet, który wysyła żądanie ARP, aby dowiedzieć się, czy adres IP należy do veth0.
  • W końcu pakiet przecina parę rur i dociera do pod4.

W ten sposób komunikują się ze sobą strąki. A teraz przejdźmy dalej i zobaczmy, jak usługi pomagają w komunikacji z podami.

Jak myślisz, jakie są te usługi?

Usługi

Zasadniczo usługi są rodzajem zasobu, który konfiguruje proxy do przekazywania żądań do zestawu podów, które będą odbierać ruch i są określane przez selektor. Po utworzeniu usługa ma przypisany adres IP, który będzie akceptować żądania na porcie.

Obecnie istnieją różne typy usług, które umożliwiają udostępnianie usługi poza adresem IP klastra.

Rodzaje usług

Istnieją głównie 4 rodzaje usług.

ClusterIP: Jest to domyślny typ usługi, który uwidacznia usługę na wewnętrznym IP klastra, dzięki czemu usługa jest dostępna tylko w obrębie klastra.

NodePort: Spowoduje to udostępnienie usługi na adresie IP każdego węzła na statycznym porcie. Ponieważ ClusterIP usługa, do której będzie kierować usługa NodePort, jest tworzona automatycznie. Z usługą NodePort możemy skontaktować się poza klastrem.

LoadBalancer: Jest to typ usługi, który udostępnia usługę zewnętrznie za pomocą systemu równoważenia obciążenia dostawcy chmury. Tak więc usługi NodePort i ClusterIP, do których będzie kierować zewnętrzny moduł równoważenia obciążenia, są tworzone automatycznie.

Nazwa zewnętrzna : Ten typ usługi mapuje usługę na zawartość pliku nazwa_zewnętrzna pole, zwracając CNAME rekord z jego wartością.

Więc chłopaki, to wszystko dotyczyło usług. Teraz możesz się zastanawiać, w jaki sposób usługi zewnętrzne łączą się z tymi sieciami, prawda?

Cóż, to nikt inny niż Sieć przychodząca .

Sieć przychodząca

Cóż, sieć Ingress jest najpotężniejszym sposobem ujawniania usług, ponieważ jest zbiorem reguł zezwalających na połączenia przychodzące, które można skonfigurować tak, aby udostępniały usługi zewnętrznie za pośrednictwem osiągalnych adresów URL. W zasadzie działa więc jako punkt wejścia do klastra Kubernetes, który zarządza zewnętrznym dostępem do usług w klastrze.

Pozwólcie, że wyjaśnię wam działanie Ingress Network na przykładzie.

Mamy 2 węzły, posiadające przestrzenie nazw pod i katalogu głównego z mostkiem Linuksa. Oprócz tego mamy również nowe wirtualne urządzenie Ethernet o nazwie flannel0 (wtyczka sieciowa) dodane do sieci głównej.

Teraz chcemy, aby pakiet przepływał z pod1 do pod 4.

  • Tak więc pakiet opuszcza sieć pod1 pod adresem eth0 i wchodzi do sieci głównej pod adresem veth0.
  • Następnie jest przekazywany do cbr0, który wysyła żądanie ARP do znalezienia celu, a następnie dowiaduje się, że nikt w tym węźle nie ma docelowego adresu IP.
  • Tak więc most wysyła pakiet do flannel0, ponieważ tablica tras węzła jest skonfigurowana z flannel0.
  • Teraz demon flanelowy komunikuje się z serwerem API Kubernetes, aby poznać wszystkie adresy IP podów i ich odpowiednie węzły, aby utworzyć mapowania adresów IP podów na adresy IP węzłów.
  • Wtyczka sieciowa opakowuje ten pakiet w pakiet UDP z dodatkowymi nagłówkami zmieniającymi źródłowy i docelowy adres IP do odpowiednich węzłów i wysyła ten pakiet przez eth0.
  • Teraz, ponieważ tablica tras już wie, jak kierować ruch między węzłami, wysyła pakiet do węzła docelowego2.
  • Pakiet dociera do et0 węzła 2 i wraca do flannel0 w celu dekapsulacji i emituje go z powrotem w głównej przestrzeni nazw sieci.
  • Ponownie pakiet jest przekazywany do mostka linuksowego w celu wysłania żądania ARP w celu znalezienia adresu IP należącego do veth1.
  • Pakiet w końcu przechodzi przez sieć główną i dociera do docelowego Pod4.

W ten sposób usługi zewnętrzne są połączone za pomocą sieci przychodzącej. Teraz, gdy mówiłem o wtyczkach sieciowych, pozwól, że przedstawię listę popularnych dostępnych wtyczek sieciowych.

Teraz, skoro już powiedziałem wam tak dużo o Kubernetes Networking, pozwólcie, że pokażę wam studium przypadku z życia wzięte.

Studium przypadku: Kreator bogactwa korzystający z Kubernetes Networking

Wealth Wizards to internetowa platforma planowania finansowego, która łączy planowanie finansowe i inteligentną technologię oprogramowania, aby zapewnić fachowe porady po przystępnej cenie.

Wyzwania

Teraz niezwykle ważne było, aby firma szybko odkryła i wyeliminowała luki w kodzie z pełną widocznością swojego środowiska chmurowego, ale chciała kontrolować ruch poprzez ograniczenia dostępu.

Dlatego wykorzystali infrastrukturę Kubernetes do zarządzania udostępnianiem i wdrażaniem klastrów za pomocą narzędzi do zarządzania wdrażaniem i konfiguracją mikrousług w klastrach Kube.

Użyli również funkcji zasad sieciowych Kubernetes, aby umożliwić im kontrolowanie ruchu poprzez ograniczenia dostępu.

Problem polegał na tym, że te zasady są zorientowane na aplikacje i mogą ewoluować tylko wraz z aplikacjami, ale nie było składnika, który wymuszałby te zasady.

Tak więc jedynym rozwiązaniem, jakie firma mogła znaleźć w tym celu, było użycie wtyczki sieciowej, dlatego zaczęli używać Weave Net.

Rozwiązanie

Ta wtyczka sieciowa tworzy sieć wirtualną, która ma kontroler zasad sieciowych do zarządzania i egzekwowania reguł w Kubernetes. Nie tylko to, ale także łączy kontenery Docker na wielu hostach i umożliwia ich automatyczne wykrywanie.

Załóżmy więc, że masz obciążenie w klastrze i chcesz zatrzymać inne obciążenie w klastrze rozmawiające z nim. Można to osiągnąć, tworząc zasady sieciowe, które ograniczają dostęp i zezwalają na dostęp do niej tylko za pośrednictwem kontrolera danych wejściowych na określonym porcie.

Teraz, dzięki wdrożeniu na każdym węźle Kubernetes, wtyczka zarządza routingiem między podami i ma dostęp do manipulowania regułami IPtables. Mówiąc prościej, każda polityka jest konwertowana na zbiór reguł IPtables, koordynowanych i konfigurowanych na każdym komputerze w celu przetłumaczenia tagów Kubernetes.

W porządku, teraz, gdy przeszedłeś przez tyle teorii na temat sieci Kubernetes, pozwól, że pokażę ci, jak to się robi w praktyce.

Praktyczny

Tak więc, zakładając, że wszyscy zainstalowaliście Kubernetes w swoich systemach, mam scenariusz do zaprezentowania.

Załóżmy, że chcesz przechowywać nazwę produktu i identyfikator produktu, do tego potrzebna będzie aplikacja internetowa. Zasadniczo potrzebujesz jednego kontenera na aplikację internetową i potrzebujesz jeszcze jednego kontenera jako MySQL dla zaplecza, a ten kontener MySQL powinien być połączony z kontenerem aplikacji internetowej.

A może praktycznie wykonam powyższy przykład.

Zacznijmy!

Krok 1: Utwórz folder w wybranym katalogu i zmień ścieżkę katalogu roboczego na ten folder.

mkdir HandsOn cd HandsOn /

Krok 2: Teraz utwórz wdrożeniowe pliki YAML dla aplikacji internetowej i bazy danych MySQL.

Krok 3: Po utworzeniu plików wdrożenia wdróż obie aplikacje.

kubectl apply -f webapp.yml kubectl apply -f mysql.yml

Krok 3.1: Sprawdź oba wdrożenia.

kubectl pobierz wdrożenie

Krok 4: Teraz musisz utworzyć usługi dla obu aplikacji.

kubectl apply -f webservice.yml kubectl apply -f sqlservice.yml

Krok 4.1: Po utworzeniu usług wdróż usługi.

Krok 4.2: Sprawdź, czy usługi zostały utworzone, czy nie.

kubectl uzyskać usługę

Krok 5: Teraz sprawdź konfigurację uruchomionych podów.

kubectl dostaje strąki

Krok 6: Przejdź do kontenera wewnątrz kapsuły aplikacji internetowej.

kubectl exec -it identyfikator_kontenera bash nano var / www / html / index.php

Krok 6.1 : Teraz zmień $ servername z lokalnego hosta do nazwy usługi SQL, czyli „ webapp-sql1 ”W tym przypadku i $ hasło od „” do „ edureka ”. Wypełnij również wszystkie wymagane szczegóły bazy danych i zapisz plik index.php za pomocą skrótu klawiaturowego Ctrl + X a potem naciśnij Y zapisać i naciśnij wchodzić .

Krok 7: Teraz przejdź do kontenera MySQL obecnego w kapsule.

kubectl wykonaj to container_id bash

Krok 7.1: Uzyskaj dostęp do korzystania z kontenera MySQL.

mysql -u root -p edureka

Gdzie -u oznacza użytkownika, a -p jest hasłem twojego komputera.

Krok 7.2: Utwórz bazę danych w MySQL, która będzie używana do pobierania danych z aplikacji internetowej.

UTWÓRZ BAZĘ DANYCH Szczegóły produktu

Krok 7.3: Użyj utworzonej bazy danych.

UŻYJ Szczegóły produktu

Krok 7.4: Utwórz tabelę w tej bazie danych w MySQL, która będzie używana do pobierania danych z aplikacji internetowej.

UTWÓRZ TABELĘ produktów (nazwa_produktu VARCHAR (10), identyfikator_produktu VARCHAR (11))

Krok 7.5: Teraz wyjdź również z kontenera MySQL za pomocą polecenia Wyjście .

Krok 8: Sprawdź numer portu, na którym działa Twoja aplikacja internetowa.

kubectl uzyskać usługi

Krok 8.1: Teraz otwórz aplikację internetową na przydzielonym do niej numerze portu.

Krok 9: Po kliknięciu Prześlij zapytanie przejdź do węzła, w którym działa usługa MySQL, a następnie wejdź do kontenera.

Spowoduje to wyświetlenie wszystkich produktów z listy, których szczegóły zostały wypełnione.

Chcesz poznać Kubernetes?

Jeśli uważasz, że ten blog Kubernetes Networking jest odpowiedni, zapoznaj się z autorstwa Edureka, zaufanej firmy zajmującej się edukacją online, z siecią ponad 250 000 zadowolonych uczniów rozsianych po całym świecie.