Skip to main content

Services

Сервис используется для подключения подов к внешней сети. Сервис использует метки для выбора подов. Все указанные метки должны быть на поде (дополнительные метки пода игнорируются)

В сервисе - раздел selector 

spec:
  replicas: 10
  <Snip>
  template:
    metadata:
      labels:
        project: tkb
        zone: prod
<Snip>
---
apiVersion: v1
kind: Service
metadata:
  name: tkb
spec:
  ports:
  - port: 8080
  selector:
    project: tkb 
    zone: prod 

Типы сервисов

ClusterIP Используется для доступности подов внутри кластера. Доступность по имени сервиса.

NodePort Services Используется для доступа приложений снаружи кластера. Добавляет указанный порт на каждую ноду. 

apiVersion: v1
kind: Service
metadata:
  name: skippy <<==== Registered with the internal cluster DNS (ClusterIP)
spec:
  type: NodePort <<==== Service type
  ports:
  - port: 8080 <<==== ClusterIP port
    targetPort: 9000 <<==== Application port in container
    nodePort: 30050 <<==== External port on every cluster node (NodePort)
selector:
  app: hello-world

В данном примере изнутри под доступен по порту 8080, снаружи - по порту 30050. Диапазон портов 30000-32767.


LoadBalancer Services Используется для сервисов со стартовым диапазоном портов, наиболее часто.  

apiVersion: v1
kind: Service
metadata:
  name: lb <<==== Registered with cluster DNS
spec:
  type: LoadBalancer
  ports:
  - port: 8080 <<==== Load balancer port
    targetPort: 9000 <<==== Application port inside container
selector:
  project: tkb

Мой кубер использует flannel, а для корректной работы LoadBalancer нужен балансировщик, например MetalLB. Стек в случае балансировщика: 

k8s_services_1.JPG

Структура YAML файла

Верхний уровень

ПараметрОписание
kindТип, в данном случае Service
specСпецификация

spec

ПараметрОписание
strategyСтратегия восстановления
replicasкол-во реплик
selectorправила выбора меток
templateописание шаблона (все аналогично описанию пода)

Пример yaml файла

apiVersion: v1
kind: Service
metadata:
  name: cloud-lb
spec:
  type: LoadBalancer
  ports:
  - port: 9000
    targetPort: 8080
  selector:
    chapter: services

 

 

Основные команды

Команда Доп. пар. Описание
kubectl expose deployment dep_name --type=LoadBalancer   Ручное создание сервиса. Вот только не поехало.
kubectl get svc -o wide   Информация по сервисам