Вы можете выставить свое приложение, используя службы, есть некоторые виды услуг, которые вы можете использовать:
ClusterIP
: Предоставляет Службу по внутреннему IP-адресу кластера. Выбор этого значения делает Сервис доступным только из кластера. Это значение по умолчанию ServiceType
.
NodePort
. Предоставляет Сервис для каждого IP-адреса узла в порту c (NodePort
). , Служба ClusterIP
, к которой NodePort
Служба направляет, создается автоматически. Вы сможете связаться со службой NodePort
из-за пределов кластера, запросив <NodeIP>:<NodePort>
.
LoadBalancer
: извлекает службу извне используя балансировщик нагрузки облачного провайдера. NodePort
и ClusterIP
Службы, для которых автоматически создаются внешние маршруты балансировки нагрузки.
ExternalName
: сопоставляет службу с содержимым externalName
поле (например, foo.bar.example.com
), возвращая CNAME
запись
Для внутренней связи вы используете тип услуги ClusterIP
, и вы можете настроить служба днс для ваших приложений вместо IP. То есть: служба с именем my-app-1
может быть достигнута внутри организации с использованием dns http://my-app-1
или с помощью fqdn http://my-app-1.<namespace>.svc.cluster.local
.
. Для внешней связи можно использовать NodePort
или * 1053. *.
NodePort
хорошо, когда у вас мало узлов и вы знаете ip всех из них. И да, с помощью сервисной документации вы можете указать указанный c номер порта:
Если вы хотите указать c номер порта, вы можете указать значение в поле nodePort
. Плоскость управления либо выделит вам этот порт, либо сообщит о сбое транзакции API. Это означает, что вам нужно позаботиться о возможных конфликтах портов самостоятельно. Вы также должны использовать действительный номер порта, который находится внутри диапазона, настроенного для использования NodePort.
LoadBalancer
дает вам больше гибкости, потому что вам не нужно знать все ips узла, вы Просто необходимо знать IP-адрес службы и порт. Но LoadBalancer
поддерживается только в облачных провайдерах, если вы хотите внедрить их в кластер с голым металлом, я рекомендую вам взглянуть на MetalLB .
Finnaly, есть еще один вариант, который используйте ingress
, на мой взгляд, это лучший способ выставлять HTTP-приложения извне, потому что вы можете создавать правила по пути и хосту, и это дает вам гораздо большую гибкость, чем услуги. Но поддерживается только HTTP / HTTPS, если вам нужен TCP, то go to Services
Я бы порекомендовал вам взглянуть по этим ссылкам, чтобы глубже понять, как работает сервис и вход :
Услуги Kubernetes
Вход Kubernetes
NGINX Вход