‫Tak więc ta odrobina magii nie była w rzeczywistości magią. To była siatka do wyznaczania trasy. Sieć routingu to sieć
‫przychodząca lub ingresyjna, która dystrybuuje pakiety dla naszej usługi do zadań dla tej usługi, ponieważ możemy
‫mieć więcej niż jedno zadanie.
‫To faktycznie obejmuje wszystkie węzły i używa prymitywów jądra, które przez jakiś czas
‫nazywały się IPVS.
‫Więc nie mówimy o jakiejś wymyślnej nowej usłudze. Tak naprawdę mówimy
‫tylko o podstawowych funkcjach jądra Linux. To, co naprawdę robi, to równoważenie obciążenia
‫we wszystkich węzłach i słuchanie wszystkich węzłów dla ruchu.
‫Jest kilka sposobów, aby porozmawiać o tym, jak to działa.
‫Pierwszy przykład pochodzi z jednego kontenera na drugi.
‫Gdyby nasz system zaplecza, jak np. Bazy danych, został zwiększony do dwóch replik, frontendy rozmawiające z
‫serwerami, nie
‫rozmawiałyby bezpośrednio z ich adresem IP.
‫Będą rozmawiać z czymś, co nazywa się VIP, lub wirtualnym adresem IP, który Swarm umieszcza przed
‫wszystkimi usługami.
‫Jest to prywatny adres IP wewnątrz wirtualnej sieci Swarm i zapewnia, że obciążenie jest rozdzielone pomiędzy
‫wszystkie zadania dla usługi.
‫Jeśli więc możesz sobie wyobrazić, że masz rolę pra- cownika w swojej aplikacji i ma ona 10 różnych kontenerów, nie musisz
‫ustawiać load balancera przed tym.
‫To robi to za ciebie.
‫Kiedy mówisz o ruchu z jednej usługi wewnątrz sieci wirtualnej, rozmawiasz z inną usługą
‫w sieci wirtualnej.
‫Drugim przykładem działania siatki routingu jest ruch z zewnątrz, który trafia do twojego roju, w rzeczywistości
‫może trafić w dowolny z węzłów w twoim roju.
‫Każdy z węzłów roboczych będzie miał otwarty port i będzie nasłuchiwał ruchu tego kontenera, a
‫następnie przekieruje ten ruch do właściwego kontenera na podstawie jego równoważenia obciążenia.
‫Oznacza to, że podczas rozmieszczania kontenerów w roju, nie powinieneś przejmować się tym, na którym serwerze
‫jest uruchomiony, ponieważ może się to poruszyć, prawda?
‫Jeśli kontener ulegnie awarii, a zadanie zostanie odtworzone przez roój, może umieścić to w innym węźle. I na pewno nie chcesz zmieniać
‫swojej zapory sieciowej lub ustawień DNS, aby ten kontener znów
‫działał.
‫Siatka routingu rozwiązuje wiele z tych problemów, umożliwiając dostęp do strony Drupal na porcie
‫80 z dowolnego węzła w roju. A w tle zabiera te pakiety z tego serwera,
‫a następnie kieruje je do kontenera. Jeśli znajduje się w innym węźle, zostanie przekierowany przez
‫sieci wirtualne.
‫Jeśli znajduje się w tym samym węźle, po prostu przekieruje go do portu tego kontenera.
‫I nie musieliśmy nic robić, aby to umożliwić.
‫To wszystko wyszło z pudełka.
‫Zobaczmy, jak to może działać.
‫Jeśli utworzyłem usługę wiadomości i kazałem jej mieć trzy repliki. I stworzył trzy zadania,
‫z trzema kontenerami, na trzech węzłach. Wewnątrz tej sieci nakładkowej faktycznie tworzony jest wirtualny adres IP, który
‫jest odwzorowany na nazwę DNS usługi, prawda? Usługa, domyślnie nazwa DNS, jest nazwą usługi.
‫W tym przypadku utworzyłem usługę o nazwie my-web i wszelkie inne kontenery, które mam w swoich sieciach nakładkowych,
‫które muszą rozmawiać z tą usługą wewnątrz roju, muszą jedynie
‫martwić się o korzystanie z mojego internetowego DNS. Wirtualny adres IP poprawnie ładuje
‫odrzuca ruch spośród wszystkich zadań w tej usłudze.
‫To w rzeczywistości nie jest DNS Round Robin. To właściwie nieco inna konfiguracja. Moglibyśmy to
‫włączyć, gdybyśmy chcieli. W rzeczywistości istnieje opcja korzystania z DNS Round Robin.
‫Korzyści płynące z VIPów przez Round Robin są takie, że wiele razy nasze pamięci podręczne DNS w naszych aplikacjach
‫uniemożliwiają nam prawidłową dystrybucję obciążenia.
‫Zamiast walczyć z naszymi klientami DNS w konfiguracji DNS, po prostu polegamy na VIP-ie, który jest
‫podobny do tego, co masz, gdybyś kupił dedykowany system równoważenia obciążenia sprzętowego.
‫W drugim przykładzie pokazuje, jak by to było, gdy nadchodził ruch zewnętrzny.
‫Jest to podobne do tego, co właśnie zrobiliśmy z Drupalem, gdzie kiedy stworzyłem te żółte skrzynki,
‫tworząc jedną usługę, zwaną moją siecią, i stworzył dwa zadania, i zastosowałem je do dwóch różnych węzłów, każdy z nich ma
‫wbudowany -w load balancer na zewnętrzny adres IP. Dla mnie, ponieważ używam DigitalOcean, ten adres IP
‫jest tym, który dał mi DigitalOcean. Kiedy używam -p i opublikuję go na
‫porcie, w tym przykładzie używa portu 80:80, dowolnego ruchu przychodzącego do któregokolwiek z tych
‫trzech haseł, które ładują loader na porcie 80:80. System równoważenia obciążenia decyduje, który kontener powinien uzyskać ruch i
‫czy jest on w lokalnym węźle, czy też musi przesłać ruch przez
‫sieć do innego węzła.
‫Ponownie, to wszystko dzieje się w tle bez specjalnego wysiłku z naszej strony.
‫W porządku. Zobaczmy tę siatkę routingu w akcji.
‫Już widzieliśmy przykład z Drupalem i tym, jak słucha on na wszystkich trzech węzłach.
‫Ale co by było, gdybyśmy mieli wiele zadań, które działałyby na zasadzie równoważenia obciążenia?
‫Jeśli utworzymy usługę dokowania,
‫to co zamierzamy zrobić, użyjemy kontenera Elasticsearch. Zamierzamy nazwać to wyszukiwanie i nadać
‫mu trzy repliki. I chcesz opublikować go na porcie 9200, który jest jego domyślnym portem.
‫W tym przypadku zdecydowanie potrzebujemy: 2, ponieważ jest to najłatwiejsza wersja do wdrożenia
‫w tej chwili. W trakcie tworzenia
‫wspomnę tylko, że Elasticsearch jest w rzeczywistości bazą danych wyszukiwania, która jest dostępna za pośrednictwem interfejsu API
‫JSON.
‫Łatwo więc trafić w curl i podać nam dobre przykłady tego działania.
‫Wykonuję wyszukiwanie w psie usługi dokowania, widzimy, że mądrze tworzy każde zadanie w innym węźle.
‫Jeśli po prostu wykonuję zawinięcie na moim hoście lokalnym, na węźle pierwszym na porcie 9200, ponieważ opublikowałem
‫ten port, otrzymam podstawowe informacje Elasticsearch. Częścią tego jest faktyczne utworzenie przypadkowej nazwy.
‫To tylko funkcja z Elasticsearch.
‫Jeśli zwinę to kilka razy, zobaczysz na tej stronie Patch, serwer Patch,
‫a
‫po raz trzeci Jane Foster, a potem zacznie się powtarzać.
‫To wirtualny adres IP działający jak load balancer i rozkładający obciążenie na
‫trzy zadania.
‫Jeszcze kilka uwag na temat siatki routingu. W 17. 03, która jest wersją, na której
‫to pokazuję, sieć routingu i równoważenie obciążenia są obecnie statymatorem równoważenia obciążenia.
‫Jeśli kiedykolwiek zajmowałeś się Stanem w środku klasycznego systemu równoważenia obciążenia Amazon lub innych technologii równoważenia obciążenia, wiesz
‫o co w tym chodzi.
‫Zasadniczo mówi się, że jeśli musisz użyć plików cookie sesji w swojej aplikacji lub spodziewasz się, że spójny kontener
‫będzie rozmawiał ze spójnym klientem, być może będziesz musiał dodać kilka innych rzeczy, które pomogą
‫rozwiązać ten problem.
‫Po wyjęciu z pudełka za każdym razem, gdy trafisz usługę z wieloma zadaniami, da to potencjalnie
‫inny wynik.
‫Ponadto, jeśli zajmiesz się szczegółami tego, jest to w rzeczywistości równoważnik obciążenia warstwy 3, który faktycznie
‫działa w warstwie IP i portowej.
‫W rzeczywistości nie działa w warstwie DNS.
‫Jeśli kiedykolwiek korzystałeś z wielu stron internetowych na tym samym porcie, na tym samym serwerze, nie zrobisz tego
‫jeszcze.
‫Nadal będziesz potrzebował kolejnej części układanki, jeśli
‫faktycznie chcesz uruchomić wiele stron internetowych na tym samym porcie, w tym samym roju.
‫Na szczęście jest to dość powszechna prośba i istnieje kilka opcji, które możesz rozwiązać, aby rozwiązać
‫oba te problemy.
‫Jedną z nich jest użycie Nginx lub HAProxy, które są całkiem niezłym przykładem kontenerów, które będą siedzieć z przodu
‫z twoją siatką routingu, i faktycznie działają jako stanowy load balancer lub warstwa dla load balancera, która może
‫również buforować i wiele innych rzeczy. Jeśli tego potrzebujesz, możesz sprawdzić
‫niektóre z nich w zasobach tej sekcji.
‫Powinienem też wspomnieć, że gdybyś miał zapłacić za subskrypcję edycji Docker Enterprise, pojawi się coś, co nazywa się
‫UCP lub Docker Data Center, który jest interfejsem sieciowym. Ale powinienem wspomnieć o edycji Docker Enterprise,
‫jeśli otrzymasz subskrypcję dla swoich węzłów roju, to faktycznie ma wbudowaną warstwę dla
‫proxy sieci, która pozwala po prostu rzucać nazwy DNS w konfigurację internetową twoich usług roju i
‫wszystko po prostu działa.