Как работает публикация портов из Docker-контейнера в Kubernetes? - PullRequest
2 голосов
/ 10 октября 2019

Во время работы над учебником Начало работы, часть 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-адресе хоста. Источник

1 Ответ

3 голосов
/ 10 октября 2019

Контейнеры, работающие в модуле, аналогичны процессам, запущенным на узле, подключенном к сети. Pod получает сетевой адрес, и все контейнеры имеют один и тот же сетевой адрес. Они могут разговаривать друг с другом, используя localhost.

Контейнер, работающий в модуле, может прослушивать любой порт по этому адресу. Если в модуле запущено несколько контейнеров, они не могут привязаться к одному и тому же порту, может только один из них. Обратите внимание, что нет необходимости публиковать эти порты. Контейнер может прослушивать любой порт, и на него будет доставляться трафик, если клиент подключится к этому порту модуля.

Таким образом, сопоставление портов из контейнера в модуль невозможно.

Открытые порты контейнеров / модулей в основном являются информационными, и инструменты используют их для создания ресурсов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...