Я бы сказал, что это категорически не рекомендуется. Согласно документации k8s: https://kubernetes.io/docs/concepts/configuration/overview/#services
Не указывайте hostPort для Pod, если это не абсолютно необходимо. Когда вы привязываете Pod к hostPort, это ограничивает количество мест, в которых Pod может быть запланирован, потому что каждый комбинация должна быть уникальной. Если вы не укажете hostIP и протокол явно, Kubernetes будет использовать 0.0.0.0 в качестве hostIP по умолчанию и TCP в качестве протокола по умолчанию.
Если вам нужен только доступ к порту для В целях отладки вы можете использовать прокси-сервер apiserver или kubectl port-forward.
Если вам явно нужно открыть порт модуля на узле, подумайте об использовании службы NodePort, прежде чем прибегать к hostPort.
Итак ... Действительно ли hostPort нужен в вашем случае? Или служба NodePort решит эту проблему?
Если это действительно необходимо, вы можете попробовать использовать IP-адрес, возвращаемый командой:
kubectl get nodes -o wide
http : // ip-from-the-command : 55555 / testapi / index
Кроме того, другой тест, который может помочь в устранении неполадок, - это проверка, доступно ли ваше приложение на IP-адресе модуля.
ОБНОВЛЕНИЕ
Я провел несколько тестов локально и лучше понял, что пытается объяснить документация. Позвольте мне go пройти мой тест:
- Сначала я создал Pod с помощью
hostPort: 55555
, я сделал это с помощью простого nginx. - Затем я перечислил свои модули и увидел, что этот работает на одном из моих c узлов.
- После этого я попытался получить доступ к модулю через порт 55555 через IP-адрес главного узла и IP-адрес другого узла. безуспешно, но при попытке доступа через IP-адрес узла, на котором фактически работал этот модуль, он работал.
Итак, «проблема» (и, собственно, поэтому этот подход не рекомендуется), заключается в что Pod доступен только через указанный c Node IP. Если он перезапустится и запустится на другом узле, IP-адрес также изменится.