Создание сервисов
В Kubernetes Service — это способ экспонирования сетевого приложения, которое работает в виде одного или нескольких Pod в вашем кластере.
Содержание
Зачем нужен Service
-
У Pod есть собственные IP-адреса, но:
-
IP Pod нестабильны (меняются при пересоздании Pod).
-
Прямой доступ к Pod становится ненадежным.
-
-
Service решает эту проблему, предоставляя:
-
Стабильный IP и DNS-имя.
-
Автоматическое балансирование нагрузки на соответствующие Pod.
-
Пример Service типа ClusterIP:
- Доступные значения type и их поведение:
ClusterIP,NodePort,LoadBalancer,ExternalName - Набор Pod, на которые нацелен Service, обычно определяется селектором, который вы задаёте.
- Порт Service.
- Привязка
targetPortService кcontainerPortPod. Также можно ссылаться наport.nameв контейнере Pod.
Headless Services
Иногда не требуется балансировка нагрузки и единый IP Service. В таком случае можно создать так называемые headless Services:
Headless Services полезны, когда:
-
Нужно обнаруживать отдельные 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 к Service:
Вы должны увидеть HTML-ответ с текстом типа "Welcome to nginx!".
Разумеется, можно также получить доступ к приложению из вне кластера, создав Service типа LoadBalancer.
Примечание: Пожалуйста, предварительно настройте сервис LoadBalancer.
-
Примените этот YAML:
-
Получите внешний IP-адрес:
EXTERNAL-IP— это адрес, по которому вы можете получить доступ из браузера.
Вы должны увидеть HTML-ответ с текстом типа "Welcome to nginx!".
Если EXTERNAL-IP равен pending, значит сервис LoadBalancer в данный момент не развернут в кластере.
Пример: Service типа ExternalName
-
Примените этот YAML:
-
Попробуйте разрешить имя внутри Pod в кластере:
затем:
Вы увидите, что имя разрешается в example.com.
Аннотации для Service типа LoadBalancer
AWS EKS Cluster
Для подробного описания аннотаций LoadBalancer Service в EKS, пожалуйста, обратитесь к Annotation Usage Documentation .
Huawei Cloud CCE Cluster
Для подробного описания аннотаций LoadBalancer Service в CCE, пожалуйста, обратитесь к Annotation Usage Documentation .
Azure AKS Cluster
Для подробного описания аннотаций LoadBalancer Service в AKS, пожалуйста, обратитесь к Annotation Usage Documentation .
Google GKE Cluster
Для подробного описания аннотаций LoadBalancer Service в GKE, пожалуйста, обратитесь к Annotation Usage Documentation .