Рейтинг:0

Как интерфейсы veth подключаются друг к другу в Linux?

флаг in
JMC

Недавно я играл с кластером Google Kubernetes Engine. У меня есть вопрос относительно их CNI. Я читал в документах GCP и других статьях, что существует мост, к которому подключаются все интерфейсы veth. По сути, для каждого контейнера создается пара veth. Один его конец находится в контейнере, а другой конец подключен к мостовому устройству. Когда контейнеры на одном узле взаимодействуют друг с другом, обмен пакетами осуществляется с использованием мостового устройства уровня 2. Это также описано в документации GKE.

https://cloud.google.com/kubernetes-engine/docs/concepts/network-overview#pods

https://medium.com/cloudzone/gke-networking-options-explained-demonstrated-5c0253415eba

Я создал кластер в Google, я вижу, что есть мостовое устройство docker0, но с ним не связаны интерфейсы.

gke-xxxxxxxxx /home/uuuuuuu # показать brctl
имя моста идентификатор моста интерфейсы с поддержкой STP
докер0 8000.0242fd0b0cf4 нет      
gke-xxxxxxxxxx /home/uuuuuuu # 

Затем я создал кластер с помощью Virtualbox, я вижу, что интерфейсы связаны с мостовым устройством.

[root@k8s-2 ~]# показать brctl
имя моста идентификатор моста интерфейсы с поддержкой STP
cni0 8000.36dae477639c нет veth7f6c1f01
                                        vethccd0d71d
                                        vethe63e4285

Я пытаюсь объяснить, почему я не могу найти устройство моста на виртуальных машинах Google? Используются ли в этом сценарии специальные функции ядра Linux?

Когда я проверяю каждый интерфейс veth на виртуальной машине Google, все они имеют один и тот же IP-адрес 10.188.2.1.

gke-xxxxxxxxxxxxxxxxxxxxx /home/user.name # ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
        инет 169.254.123.1 сетевая маска 255.255.255.0 широковещательная рассылка 169.254.123.255
        эфир 02:42:fd:0b:0c:f4 txqueuelen 0 (Ethernet)
        Пакеты RX 0 байт 0 (0,0 Б)
        Ошибки RX 0 отброшено 0 переполнение 0 кадр 0
        Пакеты TX 0 байт 0 (0,0 Б)
        Ошибки передачи 0 отброшено 0 превышение пропускной способности 0 несущей 0 коллизий 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1460
        инет 10.10.1.19 сетевая маска 255.255.255.255 широковещательный 0.0.0.0
        inet6 fe80::4001:aff:fe0a:113 prefixlen 64 scopeid 0x20<ссылка>
        эфир 42:01:0a:0a:01:13 txqueuelen 1000 (Ethernet)
        Пакеты RX 2192921 байт 1682211226 (1,5 ГиБ)
        Ошибки RX 0 отброшено 0 переполнение 0 кадр 0
        Пакеты TX 1288701 байт 468627202 (446,9 МБ)
        Ошибки передачи 0 отброшено 0 превышение пропускной способности 0 несущей 0 коллизий 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
        инет 127.0.0.1 сетевая маска 255.0.0.0
        inet6 ::1 prefixlen 128 scopeid 0x10<хост>
        loop txqueuelen 1000 (локальная петля)
        Пакеты RX 276348 байт 153128345 (146,0 МБ)
        Ошибки RX 0 отброшено 0 переполнение 0 кадр 0
        Пакеты TX 276348 байт 153128345 (146,0 МБ)
        Ошибки передачи 0 отброшено 0 превышение пропускной способности 0 несущей 0 коллизий 0

veth27cee774: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1460
        инет 10.188.2.1 сетевая маска 255.255.255.255 широковещательный 10.188.2.1
        inet6 fe80::10b7:98ff:fe2f:2e08 prefixlen 64 scopeid 0x20<ссылка>
        эфир 12:b7:98:2f:2e:08 txqueuelen 0 (Ethernet)
        Пакеты RX 32 байта 2306 (2,2 КиБ)
        Ошибки RX 0 отброшено 0 переполнение 0 кадр 0
        Пакеты TX 10 байт 710 (710,0 Б)
        Ошибки передачи 0 отброшено 0 превышение пропускной способности 0 несущей 0 коллизий 0

veth6eba4cdf: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1460
        инет 10.188.2.1 сетевая маска 255.255.255.255 широковещательный 10.188.2.1
        inet6 fe80::c4e3:b0ff:fe5f:63da prefixlen 64 scopeid 0x20<ссылка>
        эфир c6:e3:b0:5f:63:da txqueuelen 0 (Ethernet)
        Пакеты RX 537091 байт 138245354 (131,8 МБ)
        Ошибки RX 0 отброшено 0 переполнение 0 кадр 0
        Пакеты TX 477870 байт 122515885 (116,8 МБ)
        Ошибки передачи 0 отброшено 0 превышение пропускной способности 0 несущей 0 коллизий 0

veth8bcf1494: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1460
        инет 10.188.2.1 сетевая маска 255.255.255.255 широковещательный 10.188.2.1
        inet6 fe80::70cb:c4ff:fe8c:a747 prefixlen 64 scopeid 0x20<ссылка>
        эфир 72:cb:c4:8c:a7:47 txqueuelen 0 (Ethernet)
        Пакеты RX 50 байт 3455 (3,3 КиБ)
        Ошибки RX 0 отброшено 0 переполнение 0 кадр 0
        Пакеты TX 28 байт 2842 (2,7 КиБ)
        Ошибки передачи 0 отброшено 0 превышение пропускной способности 0 несущей 0 коллизий 0

vethbb2135c7: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1460
        инет 10.188.2.1 сетевая маска 255.255.255.255 широковещательный 10.188.2.1
        inet6 fe80::1469:daff:fea0:8b5b prefixlen 64 scopeid 0x20<ссылка>
        эфир 16:69:da:a0:8b:5b txqueuelen 0 (Ethernet)
        Пакеты RX 223995 байт 82725559 (78,8 МБ)
        Ошибки RX 0 отброшено 0 переполнение 0 кадр 0
        Пакеты TX 239258 байт 60203574 (57,4 МБ)
        Ошибки передачи 0 отброшено 0 превышение пропускной способности 0 несущей 0 коллизий 0

vetheee4e8e3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1460
        инет 10.188.2.1 сетевая маска 255.255.255.255 широковещательный 10.188.2.1
        inet6 fe80::ec6c:3bff:fef3:70c2 prefixlen 64 scopeid 0x20<ссылка>
        эфир ee:6c:3b:f3:70:c2 txqueuelen 0 (Ethernet)
        Пакеты RX 311669 байт 40562747 (38,6 МБ)
        Ошибки RX 0 отброшено 0 переполнение 0 кадр 0
        Пакеты TX 304461 байт 628195110 (599,0 МБ)
        Ошибки передачи 0 отброшено 0 превышение пропускной способности 0 несущей 0 коллизий 0

Что стоит за этими интерфейсами veth?

заранее спасибо

флаг vn
Разве второй документ, на который вы ссылаетесь, не объясняет это? «С Calico в узле нет сетевого моста L2, вместо этого для всего трафика между pod используется маршрутизация L3».
JMC avatar
флаг in
JMC
Спасибо, Марк. Если вы видите мой пример, все интерфейсы имеют префикс veth вместо cali. Мой кластер не использует calico CNI.
Alex G avatar
флаг ar
Если вы хотите просмотреть пакеты, поступающие из/в cidr пода, укажите cbr0, который является мостом Linux, у которого есть все интерфейсы veth, подключенные ко всем контейнерам. Использование `tcpdump -i cbr0` может помочь в устранении неполадок.
JMC avatar
флаг in
JMC
@AlexG Похоже, cbr0 не существует. Я вижу только интерфейсы veth, но не мостовое устройство, что является загадкой. В любом случае, я обнаружил, что cbr0 существует, если я использую более старую версию. Попробовал 1.18-гке версию. Эта версия использует Docker в качестве среды выполнения контейнера и имеет устройство cbr0. Начиная с версии 1.19.x-gke-xxxx узлы GKE используют containerd в качестве среды выполнения, а устройство cbr0 больше не создается.
Рейтинг:1
флаг ar

Если у моста уже есть интерфейсы, brctl-шоу Команда может использоваться для просмотра информации о мосте и интерфейсе узла. Похоже, вы не ввели никаких интерфейсов в мост в вашей ситуации. Вы можете добавить интерфейсы к мосту с помощью sudo brctl addif docker0 veth0, и вы можете получить все необходимые сведения о мосте и интерфейсе в узле с помощью той же команды. Проверять этот документ для справки.

JMC avatar
флаг in
JMC
При полностью работающем кластере нет необходимости добавлять veth0 в docker0. Это уже обрабатывается при создании нового модуля. Как я упоминал в комментарии выше, 1.18-gke — последняя версия, в которой до сих пор используется cbr0. Я считаю, что маршрутизация пакетов осуществляется по правилам маршрутизации. В версии 1.19.x у каждого IP-адреса модуля есть собственная запись в таблице маршрутов.
Alex G avatar
флаг ar
Существуют ли модули, которые установили для hostNetwork значение false в GKE 1.19?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.