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