Создание сервисов
В Kubernetes сервис — это способ открыть сетевое приложение, работающее в виде одного или нескольких Pod в вашем кластере.
Содержание
Зачем нужен сервисПример сервиса типа ClusterIP:Headless-сервисыСоздание сервиса через веб-консольСоздание сервиса через CLIПример: Доступ к приложению внутри кластераПример: Доступ к приложению вне кластераПример: Сервис типа ExternalNameАннотации для сервиса типа LoadBalancerAWS EKS ClusterHuawei Cloud CCE ClusterAzure AKS ClusterGoogle GKE ClusterЗачем нужен сервис
-
У Pod есть собственные IP, но:
-
IP Pod нестабильны (меняются при пересоздании Pod).
-
Прямой доступ к Pod становится ненадежным.
-
-
Сервис решает эту проблему, предоставляя:
-
Стабильный IP и DNS-имя.
-
Автоматическое балансирование нагрузки на соответствующие Pod.
-
Пример сервиса типа ClusterIP:
- Доступные значения type и их поведение:
ClusterIP,NodePort,LoadBalancer,ExternalName - Набор Pod, на которые нацелен сервис, обычно определяется селектором, который вы задаёте.
- Порт сервиса.
- Привязка
targetPortсервиса кcontainerPortPod. Также можно ссылаться наport.nameвнутри контейнера Pod.
Headless-сервисы
Иногда не требуется балансировка нагрузки и единый IP сервиса. В таком случае можно создать так называемые headless-сервисы:
Headless-сервисы полезны, когда:
-
Нужно обнаруживать отдельные IP Pod, а не только один IP сервиса.
-
Требуются прямые подключения к каждому Pod (например, для баз данных типа Cassandra или StatefulSets).
-
Используются StatefulSets, где каждый Pod должен иметь стабильное DNS-имя.
Создание сервиса через веб-консоль
-
Перейдите в Container Platform.
-
В левой панели навигации выберите Network > Services.
-
Нажмите Create Service.
-
Следуйте инструкциям для настройки соответствующих параметров.
-
Нажмите Create.
Создание сервиса через CLI
Создать сервис на основе существующего ресурса deployment my-app.
Пример: Доступ к приложению внутри кластера
-
Примените этот YAML:
-
Запустите другой Pod:
-
Доступ к сервису
nginx-clusteripиз Podtest-pod:
Вы должны увидеть HTML-ответ с текстом вроде "Welcome to nginx!".
Пример: Доступ к приложению вне кластера
-
Примените этот YAML:
-
Проверка Pod:
-
curl к сервису:
Вы должны увидеть HTML-ответ с текстом вроде "Welcome to nginx!".
Разумеется, можно также получить доступ к приложению снаружи кластера, создав сервис типа LoadBalancer.
Примечание: Пожалуйста, настройте сервис LoadBalancer заранее.
-
Примените этот YAML:
-
Получите внешний IP-адрес:
EXTERNAL-IP— это адрес, по которому вы можете получить доступ из браузера.
Вы должны увидеть HTML-ответ с текстом вроде "Welcome to nginx!".
Если EXTERNAL-IP равен pending, значит сервис LoadBalancer в данный момент не развернут в кластере.
Пример: Сервис типа ExternalName
-
Примените этот YAML:
-
Попробуйте разрешить имя внутри Pod в кластере:
затем:
Вы увидите, что оно разрешается в example.com.
Аннотации для сервиса типа LoadBalancer
AWS EKS Cluster
Для подробного описания аннотаций сервиса LoadBalancer в EKS смотрите Annotation Usage Documentation .
Huawei Cloud CCE Cluster
Для подробного описания аннотаций сервиса LoadBalancer в CCE смотрите Annotation Usage Documentation .
Azure AKS Cluster
Для подробного описания аннотаций сервиса LoadBalancer в AKS смотрите Annotation Usage Documentation .
Google GKE Cluster
Для подробного описания аннотаций сервиса LoadBalancer в GKE смотрите Annotation Usage Documentation .