Фланел срещу Калико: Битка между мрежите, базирани на L2 срещу L3

Днес обсъждаме работата в мрежа в контейнерния свят и най-вече в контекста на K8s. Ние не покриваме политиката и изолационната част, а само как L2 и L3 играят роля в пакетните потоци.

Flannel е механизъм за наслагване на мрежата, където като Calico е чиста L3 игра.

Flannel работи с помощта на vxlan устройство във връзка със софтуерен превключвател като linux bridge или ovs.

Контейнер A, когато се опитва да достигне контейнер B на различен хост, трафикът се изтласква към моста на хост A чрез двойката VETH. След това мостът, базиран на ARP, се опитва да получи mac на контейнер B. Тъй като контейнер B не е на хоста, трафикът по мост се препраща в L2 към vxlan устройството (софтуерно TAP устройство), което позволява на софтуера на фланелен демон да улавя тези пакети и след това увийте в L3 пакет за транспорт през физическа мрежа, използвайки UDP. Също така маркирането на vxlan се добавя към пакета, за да ги изолира между наематели.

Фланел е показан схематично

В случай на Калико, подходът е малко по-различен. Calico работи в Layer 3 и зависи от маршрутизирането на Linux за преместване на пакетите.

Calico инжектира правило за маршрутизация вътре в контейнера за шлюз при този IP 169.254.1.1.

по подразбиране чрез 169.254.1.1 dev eth0

169.254.1.1 dev eth0 обхват на връзката

Това означава, че всеки трафик от контейнера първо се опитва да премине към IP шлюза по подразбиране. Тъй като IP шлюза по подразбиране е достижим при eth0, ARP заявката се изпраща до eth0 за определяне на mac адреса за IP шлюза.

Номерът тук е arp прокси, конфигуриран на veth устройството от страна на хоста.
Този arp прокси отговаря на своя mac за ARP заявката за 169.254.1.1.

След тази резолюция пакетите се изпращат до veth устройството с източник IP на контейнера и IP адрес на целевия контейнер. Оттук нататък влиза в сила маршрутизацията на L3 на хоста, който знае как да маршрутизира за IP контейнера за местоназначение.

Маршрутите между хостовете се синхронизират чрез BGP протокол. На всеки хост работи BGP клиент (Bird), което гарантира, че всеки хост има актуализирани маршрути.

Така че тук можете да видите в Calico решение, ние се отървахме от софтуерните мостове, както и запазихме източника на IP.

Диаграмно потокът е показан по-долу

Освен това сложността на наслагването е извън снимката и това е чисто L3 решение, просто основано на принципите на това как работи интернет. Тъй като ние използваме принципите на маршрутизиране, а не L2 излъчващи домейни, необходимостта от vlan се елиминира. Вместо специфичните за наемателя мрежови потоци Calico прибягва до iptables механизъм.

Така че, ако просто се опитаме да сравним как да кажем комуникация, базирана на мост, се случва с чиста L3 комуникация, разликата е, че в случай на мост IP устройството на моста действа като шлюз за контейнери и така следващият скок за всеки трафик, който не е в същото предаване домейнът е насочен към мостовото устройство. Това позволява на L3 on linux ядрото на хоста да прилага маршрутизацията (правилата за маршрутизация са конфигурирани да препращат пакетите към vm, в който пребивава контейнерът) или те се препращат към устройство за докосване, за да се даде възможност за тунел на пакетите чрез GRE / vxlan.

Напротив, подходът Calico разчита на прокси механизъм ARP за прехвърляне на пакета към устройството на veth counterpart от страна на хоста и отново прилага маршрута за извеждане на трафик. Така че ако анализираме това внимателно, технически мостът е заменен с прокси ARP и синхронизацията на маршрута се случва над BGP.

За повече информация относно Calico можете да разгледате https://www.projectcalico.org/

По същество пакетите от vm или контейнери могат да използват един от следните механизми за комуникация с контейнери / vms на други хостове

  1. Използвайте наслагване като GRE / VXLAN
  2. използвайте NAT за изпращане на пакети към отдалечен хост
  3. използвайте механизъм като Calico с чиста маршрутизация L3, без да има NAT и мостове. Това позволява да се запази изходният IP и политиките за сигурност, влизането може да се приложи адекватно въз основа на IP източници

Ако търсите по-задълбочено покритие на виртуализацията и вътрешността на контейнерите, моля, проверете тази книга от автора на блога

https://leanpub.com/linuxcontainersandvirt

https://www.amazon.com/dp/1080299424?ref_=pe_3052080_397514860

Отказ от отговорност: Изразените по-горе мнения са лични, а не на компанията, за която работя.