Ostatnio pracowałem nad treściami PaaS i właśnie nawiązałem kontakt z Kubernetes, który dotyczy pokrycia sieci, czyli komunikacji między kontenerami międzyhostowymi. W ten sposób powstała seria open source komponentów, takich jak flanela, kaliko, tkanina itp. Tutaj głównie są Calico i Fannel.
Zasada flaneli
Flannel, projekt opracowany przez CoreOS, jest prawdopodobnie najbardziej bezpośrednią i popularną wtyczką CNI. Jest to jeden z najbardziej dojrzałych przykładów architektury sieciowej w systemach orkiestracji kontenerów i został zaprojektowany tak, aby umożliwić lepsze sieci międzykontenerowe i międzyhostowe. Wraz z rozwojem koncepcji CNI, wtyczka Flannel CNI jest jednym z pierwszych wdrożeń.
Flanela jest stosunkowo łatwa w montażu i konfiguracji w porównaniu do innych opcji. Jest on zapakowany jako pojedynczy binarny FlannelD, a wiele popularnych narzędzi do wdrożenia klastrów Kubernetes oraz wiele dystrybucji Kubernetes może domyślnie instalować Flannel. Flannel może korzystać z istniejącego klastra etcd klastra Kubernetes do przechowywania informacji o stanie za pomocą API, więc nie wymaga dedykowanego magazynu danych.
Flannel konfiguruje sieć nakładkową IPv4 warstwy 3. Tworzy dużą wewnętrzną sieć, która obejmuje każdy węzeł w klastrze. W tej sieci nakładkowej każdy węzeł posiada podsieć służącą do wewnętrznego przypisywania adresów IP. Podczas konfiguracji kapsuły interfejs mostu Dockera na każdym węźle przypisuje adres do każdego nowego kontenera. Pody na tym samym hostze mogą komunikować się za pomocą mostów Docker, podczas gdy kapsuły na różnych hostach używają flanneld do enkapsulacji ruchu w pakietach UDP, aby mogły być kierowane do odpowiedniego miejsca docelowego.
Flannel posiada kilka różnych typów backendów, które mogą być używane do enkapsulacji i trasowania. Domyślne i zalecane podejście to używanie VXLAN, ponieważ VXLAN działa lepiej i wymaga mniej ręcznej interwencji.
Architektura kaliko
Kaliko zawiera następujące ważne komponenty: Felix, etcd, klient BGP oraz reflektor tras BGP. Poniżej przedstawiono wyjaśnienia każdego z tych elementów.
Felix: Głównie odpowiada za konfigurację routingu, konfigurację i dostarczanie reguł ACLS, istnieje na każdym węźle.
etcd: Rozproszony magazyn klucz-wartość, głównie odpowiedzialny za spójność metadanych sieci, zapewniając dokładność stanu sieci Calico, może być współdzielony z Kubernetes;
BGPClient (BIRD) jest głównie odpowiedzialny za dystrybucję informacji routingowych zapisanych przez Felixa do jądra do obecnej sieci Calico, aby zapewnić skuteczność komunikacji między obciążeniami.
BGPRoute Reflector (BIRD) jest używany w dużych wdrożeniach, rezygnując z trybu mesh łączącego wszystkie węzły i wykorzystując jeden lub więcej reflektorów BGPRoute do zakończenia scentralizowanego trasowania i dystrybucji.
Zasada kaliko
Jak pokazano na poniższym diagramie, proces jest przedstawiony od kontenera źródłowego przez host źródłowy, przez trasowanie centrum danych, aż do hosta docelowego i ostatecznie przypisany do kontenera docelowego.
Kontrast
Z powyższej zasady wynika, że flannel wykonuje operacje rozpakowywania pakietów na podstawie przekierowania routingu, co marnuje zasoby obliczeniowe CPU. Poniższy wykres porównuje wydajność różnych open source komponentów sieciowych dostępnych online. Widać, że pod względem przepustowości i opóźnień sieci wydajność Calico i hosta jest podobna.
|