EKS, использующие вход NLB и несколько служб, развернутых в группе узлов

#amazon-web-services #kubernetes #amazon-elb #amazon-eks #aws-load-balancer

#amazon-веб-сервисы #kubernetes #amazon-elb #amazon-eks #aws-балансировщик нагрузки

Вопрос:

Итак, я очень новичок в использовании EKS с NLB ingress и управлении своими собственными рабочими узлами с помощью nodegroup (ASG). Если я создам вход NLB для кластера и разверну несколько служб внутри группы узлов, как NLB узнает, что он должен балансировать нагрузку между службами отдельно? Обычно, когда я не использовал EKS и создавал собственный кластер k8s, я запускал один NLB для каждой службы. Не уверен, как это будет работать в случае EKS с одним входом NLB для всего кластера с несколькими службами внутри. Или мне нужно каким-то образом создать несколько NLB? Любая помощь будет высоко оценена

Ответ №1:

когда я не использовал EKS и создавал собственный кластер k8s, я запускал один NLB для каждой службы

AWS EKS ничем не отличается в этом отношении. Для сетевого балансировщика нагрузки, NLB, например, на уровне TCP / UDP, вы используете Kubernetes Service of type: LoadBalancer . Но есть параметры, настраиваемые аннотациями на Service . Самой последней функцией является режим IP. Дополнительные варианты конфигурации см. В документе EKS Network Load Balancing doc.

Пример:

 kind: Service
apiVersion: v1
metadata:
  name: nlb-ip-svc
  annotations:
    # route traffic directly to pod IPs
    service.beta.kubernetes.io/aws-load-balancer-type: "nlb-ip"
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
  type: LoadBalancer
  selector:
    app: nginx
  

Если я создам вход NLB для кластера и разверну несколько служб внутри группы узлов, как NLB узнает, что он должен балансировать нагрузку между службами отдельно?

Балансировщик нагрузки использует целевые модули, которые совпадают selector: с вашими Service .

Альтернативой является использование балансировщика нагрузки приложений, ALB, который работает на уровне HTTP / HTTPS, используя Ingress ресурсы Kubernetes. Для ALB требуется контроллер входа, установленный в кластере, а контроллер для ALB недавно обновлен, см. AWS Load Balancer Controller

Комментарии:

1. как будет работать селектор, если у меня есть несколько служб в ASG? Нужно ли мне иметь несколько селекторов?

2. ASG управляет узлами (виртуальными машинами), но селектор сопоставляет метки в Pod (~ containers) — балансировщик нагрузки в kubernetes отправляет трафик в контейнерные службы. Если вы хотите, чтобы они были связаны, вы можете использовать NodeSelectors или Taints запланировать некоторые модули для определенных узлов. ASG автоматически масштабируется для узлов. Чтобы получить автоматическое масштабирование также для модулей, вы должны использовать HorizontalPodAutoscaler .