Kubernetes Service
может иметь targetPort
и port
в определении сервиса:
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
В чем разница между port
и targetPort
?
service
kubernetes
port
Иаков
источник
источник
Ответы:
Служба: направляет трафик на контейнер.
TargetPort: это фактический порт, на котором ваше приложение работает внутри контейнера.
Порт: Иногда ваше приложение внутри контейнера обслуживает разные службы на другом порту.
Пример: фактическое приложение может запускаться,
8080
а проверки работоспособности для этого приложения могут выполняться через8089
порт контейнера. Поэтому, если вы попадаете в службу без порта, она не знает, на какой порт контейнера следует перенаправить запрос. Сервис должен иметь отображение, чтобы он мог попасть в конкретный порт контейнера.если вы попадаете в точку,
my-service:8089
трафик перенаправляется8080
в контейнер (targetPort). Точно так же, если вы нажмете,my-service:8443
он будет перенаправлен8085
в контейнер (targetPort). Но этоmyservice:8089
внутреннее для кластера kubernetes и может использоваться, когда одно приложение хочет взаимодействовать с другим приложением. Таким образом, чтобы попасть в службу извне кластера, кому-то нужно открыть порт на хост-машине, на которой запущены кубернеты, чтобы трафик перенаправлялся на порт контейнера. Этоnode port
(порт доступен на хост-машине). Из приведенного выше примера вы можете запустить службу извне кластера (почтальон или любой другой клиент),host_ip:nodePort
Предположим, что ваш хозяин машины внутрибрюшинно это
10.10.20.20
вы можете нажать на HTTP, метрики, медицинские услуги по10.10.20.20:30475
,10.10.20.20:31261
,10.10.20.20:30013
.Изменения: отредактировано в соответствии с комментарием Раэдвальда .
источник
port
иtargetPort
отличаться? Так, например, глядя на вашhealth
пример, зачем создаватьport
8443
вместо8085
? В принципе, почему есть два параметра вместо того, чтобы просто отображать всеtargetPort
в сервисе?Это помогает мне думать о вещах с точки зрения сервиса .
nodePort
: Порт на узле, на который будет входить внешний трафик.port
: Порт этой службыtargetPort
Целевой порт модуля (-ов) для пересылки трафикаВходящий трафик
nodePort
пересылаетсяport
на службу, которая затем направляется кtargetPort
модулю (ам).Особо подчеркнем, что
nodePort
это касается внешнего трафика. Другие модули в кластере, которым может потребоваться доступ к службе, будут просто использоватьport
,nodePort
а не только для внутреннего доступа к службе.Также стоит отметить, что если
targetPort
не задан, по умолчанию будет то же значение, что иport
. Например,80:80
для порта обслуживания,80
нацеленного на контейнерный порт80
.источник
port
иtargetPort
. Вы действительно устранили путаницу.Ответ, данный выше @Manikanta P, правильный. Однако при первом чтении объяснение слова «Порт» может показаться немного непонятным. Поясню на примере:
Рассмотрим веб-приложение с его статическим содержимым (первая страница, изображения и т. Д.), Размещенным на httpd, и динамическим содержимым (например, ответ на запросы и т.д.), размещенным на tomcat. Веб-сервер (или статический контент) обслуживается httpd в порту,
80
а сервер приложений (или динамический контент) обслуживается tomcat в порту8080
.Чего хочет разработчик: пользователь должен иметь доступ к веб-серверу извне, но не к серверу приложений извне.
Решение. Тип службы веб-сервера в его service.yml будет NodePort, а тип службы сервера приложений в его service.yml будет ClusterIP.
Код для service.yml веб-сервера:
Код для сервера приложений service.yml
Также обратите внимание, что в
httpd.conf
файле веб-сервера мы запишем IP-адрес, который перенаправляет запрос пользователя на сервер приложений. Этот IP будет:host_IP:5050
.Что именно здесь происходит? Пользователь пишет
hostIP:30475
и видит страницу веб-сервера. Это потому, что он обслуживается httpd в порту80
(targetport). Когда пользователь нажимает кнопку, делается запрос. Этот запрос перенаправляется на сервер приложений, поскольку вhttpd.conf
файле5050
указан порт, и это порт, по которому контейнер сервера приложений и контейнер веб-сервера обмениваются данными внутри. Когда сервер приложений получает запрос, он может обслуживать запрос из-за того, что tomcat работает внутри него в порту8080
.источник
httpd.conf
«потому что в файле httpd.conf упоминается порт 5050»Этот ответ предназначен для ссылки на документацию Kubernetes в дополнение к другим ответам:
https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/ :
https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/ :
источник
В двух словах
nodeport:
Прослушивает внешний запрос на всех рабочих узлах на nodeip: port и пересылает запрос на порт.port:
Внутренний порт службы кластера для контейнера и прослушивает входящий запрос от nodeport и пересылает на targetPort.targetPort:
Получите запрос от порта и переадресуйте его в контейнерный модуль (порт), где он прослушивает. даже если вы не укажете это, по умолчанию будут назначены те же номера портов, что и для порта.источник
«Целевой порт» - это порт, на котором работает ваш контейнер.
Порт: порт перенаправляет трафик в контейнер от службы.
Раскрытие развертывания
NodePort: порт, который позволяет службе обращаться к внешнему файлу.
Надеюсь, что это ответ.
источник
если контейнер прослушивает порт 9376, тогда targetPort : 9376
если служба прослушивает порт 80, то порт : 80
Тогда конфигурация сервисных портов выглядит так, как показано ниже
Наконец, запрос получен на порт службы и переадресован на targetPort модуля.
источник