Есть ли у док-контейнера собственный стек TCP/IP?

Я пытаюсь понять, что происходит под капотом с сетевым пакетом, поступающим по проводу, подключенному к хост-машине и направленному к приложению внутри контейнера Docker.

Если бы это была классическая виртуальная машина, я знаю, что пакет, поступающий на хост, будет передаваться гипервизором (скажем, VMware, VBox и т. Д.) На виртуальный сетевой адаптер виртуальной машины и оттуда через стек TCP/IP гостевой ОС. наконец дойдя до приложения.

В случае Docker я знаю, что пакет, поступающий на хост-машину, перенаправляется с сетевого интерфейса хоста на docker0 мост, который связан с veth окончание пары на виртуальном интерфейсе eth0 внутри контейнера. Но после этого? Поскольку все контейнеры Docker используют ядро ​​хоста, правильно ли предполагать, что пакет обрабатывается стеком TCP/IP ядра хоста? Если так, то как?

Я действительно хотел бы прочитать подробное объяснение (или, если вы знаете, ресурс, не стесняйтесь связать его) о том, что на самом деле происходит под капотом. Я уже внимательно прочитал эту страницу, но она говорит не все.

Заранее спасибо за ваш ответ.

1 ответ

Сетевой стек, как и в "коде", определенно не находится в контейнере, он находится в ядре, в котором есть только один общий ресурс для хоста и всех контейнеров (вы уже знали об этом). Каждый контейнер имеет свое отдельное сетевое пространство имен, что означает, что он имеет свои собственные сетевые интерфейсы и таблицы маршрутизации.

Вот краткая статья о введении понятия с некоторыми примерами: http://blog.scottlowe.org/2013/09/04/introducing-linux-network-namespaces/ и я нашел эту статью полезной: http://containerops.org/2013/11/19/lxc-networking/

Я надеюсь, что это даст вам достаточно указателей, чтобы копать глубже.

Другие вопросы по тегам