Подтвердить что ты не робот

У контейнера докеров есть собственный стек TCP/IP?

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

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

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

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

Заранее благодарим за ваш ответ.

4b9b3361

Ответ 1

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

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

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