Назад | Перейти на главную страницу

Почему Kubernetes (AWS EKS) регистрирует всех воркеров в Load Balancer?

Я хочу знать, является ли это поведением по умолчанию или что-то не так с моей настройкой.

У меня на кубернетах работает 150 рабочих.

Я заставил набор рабочих kubernetes (10 рабочих) запускать только определенное развертывание с помощью nodeSelector, я создал для него службу (type = LoadBalancer), когда был создан Load Balancer, все 150 рабочих Kubernetes были зарегистрированы в Load Balancer, в то время как я ожидал увидеть только этот набор рабочих (10 рабочих) этого развертывания / службы.

Он вел себя так же с alb-ingress-controller и AWS NLB

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
  - port: 8080
  type: LoadBalancer

и развертывание

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  selector:
    matchLabels:
      app: my-app
  replicas: 10
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: master-api
        image: private/my-app:prod
        resources:
          requests:
            memory: 8000Mi
        ports:
        - containerPort: 8080
      nodeSelector:
        role: api 

Я уже пометил 10 рабочих узлов меткой role=api 10 модулей только для запуска этого развертывания, и никакой другой работник не запускает эту службу, у меня также нет другой службы или контейнера, использующего порт 8080

Это нормально. Когда kubernetes настраивает балансировщик нагрузки, он настраивает все узлы, чтобы они были частью серверной службы. Балансировщик нагрузки не знает и не заботится о том, какие узлы на каких подах работают. Вы можете думать об этом как о маршрутизации трафика к кластер (в целом), а не для конкретных рабочих нагрузок. После того, как трафик поступает в кластер, он может быть разумно направлен в нужные модули в зависимости от текущего состояния кластера и его рабочих нагрузок.