Есть ли у док-контейнера собственный стек 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/
Я надеюсь, что это даст вам достаточно указателей, чтобы копать глубже.