#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
.