Существует большая разница между простым Docker / Docker Compose и Kubernetes. В Docker один контейнер может связаться с другим, используя имя другого контейнера в качестве имени хоста и любой порт, который контейнер прослушивает, без каких-либо специальных объявлений. В Кубернетес все общение между модулями обычно осуществляется через службу.
Даже если вы не публикуете порты контейнера извне, его Dockerfile часто будет содержать объявление EXPOSE
с именами некоторых конкретных портов, и вы можете указать их в спецификации pod и service. Если у вас нет Dockerfile, вам могут сообщить docker history
или docker inspect
. В отсутствие даже этой информации вам придется использовать другие, возможно, нетехнические средства, чтобы выяснить это.
Если контейнер вообще не принимает входящие соединения (например, это рабочий контейнер для системы очередей заданий), вам может вообще не понадобиться Служба.
Если вы не принимаете входящие соединения, но по-прежнему нуждаетесь в услуге (это требование при использовании Istio ), тогда службе необходимо объявить
type: ClusterIP
clusterIP: None
Это плохо документировано, но в коде действительно есть правило, что у Сервиса должен быть хотя бы один порт без этого.