Во время работы над руководством Начало работы, Часть 3: Развертывание в Kubernetes я споткнулся шаблон Pod в определении развертывания файла манифеста. Не указаны порты ни в модуле, ни в разделе контейнера.
Это привело меня к моему первоначальному вопросу: как публикация портов работает из контейнера докеров в модуле?
Следующая цитата звучит так, будто kubernetes получает представление о запущенном контейнере после запуска и получает порт от службы, прослушивающей 0.0.0.0:PORT, и сопоставляет его с тем же портом в среде пода (сетевое пространство имен).
Отсутствие указания порта здесь НЕ ПРЕДОСТАВЛЯЕТ доступ к этому порту. Любой порт, который прослушивает адрес по умолчанию «0.0.0.0» внутри контейнера, будет доступен из сети. Источник
Если мое предположение идет в правильном направлении, что это означает для модулей с несколькими контейнерами? Кубернетес разрешает только контейнеры с внутренними службами, прослушивающими разные порты? Или можно сопоставить внутренние порты контейнера с разными портами в среде модуля (сетевое пространство имен)?
Согласно следующей цитате, я предполагаю, что сопоставление портов от контейнера к модулю невозможно. На самом деле нет особого смысла указывать две службы в двух контейнерах с одними и теми же портами, просто чтобы изменить их с помощью сопоставления, которое следует сразу после этого.
Открытие порта здесь дает системе дополнительную информацию о сетевых соединениях, используемых контейнером, но в первую очередь носит информационный характер. Источник
ОБНОВЛЕНИЕ 15.10.2019
Как указано в следующей цитате, контейнер докеров по умолчанию не публикует порт для внешнего мира.
По умолчанию, когда вы создаете контейнер, он не публикует ни один из своих портов для внешнего мира. Чтобы сделать порт доступным для служб за пределами Docker или для контейнеров Docker, которые не подключены к сети контейнера, используйте флаг --publish или -p. Источник
Это означает, что kubernetes должен каким-то образом настроить контейнер докеров, работающий внутри модуля, чтобы порты контейнера публиковались в модуле.
Что касается следующей цитаты, возможно ли, что Kubernetes запускает контейнеры докеров, используя конфигурацию --network host? Предполагается, что модуль является хостом докеров в кубернетах.
Если вы используете сетевой режим хоста для контейнера, сетевой стек этого контейнера не изолирован от хоста Docker [...] Например, если вы запускаете контейнер, который привязывается к порту 80, и вы используете сеть хоста, приложение контейнера доступен на порту 80 на IP-адресе хоста. Источник