Как создать сервис kubernetes для контейнера без порта - PullRequest
0 голосов
/ 17 июня 2019

Я приношу заявку, которая состоит из разных компонентов в Kubernetes. Теперь я столкнулся с некоторыми компонентами, что их составной файл не имеет никакого порта, и я не знаю, как создать для них сервис. Я проверил эти компоненты и их сетевые настройки, как показано ниже:

"NetworkSettings": {
    "Bridge": "",
    "Ports": {},
    "Gateway": "172.18.133.1",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "IPAddress": "172.18.133.14",
    [other-configs]
}

Как мы можем создавать сервисы для таких компонентов?

Ответы [ 2 ]

2 голосов
/ 18 июня 2019

Существует большая разница между простым Docker / Docker Compose и Kubernetes. В Docker один контейнер может связаться с другим, используя имя другого контейнера в качестве имени хоста и любой порт, который контейнер прослушивает, без каких-либо специальных объявлений. В Кубернетес все общение между модулями обычно осуществляется через службу.

Даже если вы не публикуете порты контейнера извне, его Dockerfile часто будет содержать объявление EXPOSE с именами некоторых конкретных портов, и вы можете указать их в спецификации pod и service. Если у вас нет Dockerfile, вам могут сообщить docker history или docker inspect. В отсутствие даже этой информации вам придется использовать другие, возможно, нетехнические средства, чтобы выяснить это.

Если контейнер вообще не принимает входящие соединения (например, это рабочий контейнер для системы очередей заданий), вам может вообще не понадобиться Служба.

Если вы не принимаете входящие соединения, но по-прежнему нуждаетесь в услуге (это требование при использовании Istio ), тогда службе необходимо объявить

type: ClusterIP
clusterIP: None

Это плохо документировано, но в коде действительно есть правило, что у Сервиса должен быть хотя бы один порт без этого.

1 голос
/ 17 июня 2019

Предполагается, что вы говорите об общедоступном доступе, согласно документации докера ,

По умолчанию, когда вы создаете контейнер, он не публикует свои порты ввнешний мир.Чтобы сделать порт доступным для служб вне Docker или для контейнеров Docker, которые не подключены к сети контейнера, используйте флаг --publish или -p.

Если вы имеете в видуДля связи с контейнером в docker-compose вам придется проверять ваше приложение, поскольку порты не требуют «разоблачения» в сети Docker.

...