Вопрос или проблема
Я пытаюсь установить consul на EKS через helm. Мне удается развернуть consul и получить доступ к интерфейсу через NLB. Я предпочел бы использовать ALB, но не могу правильно настроить конфигурацию. Мой yaml файл приведен ниже. это не работает. поды создаются, создаются сервисы, создается ingress.
global:
enabled: true
image: redacted/hashicorp/consul:1.20.1-ubi
imageK8S: redacted/hashicorp/consul-k8s-control-plane:1.6.1-ubi
datacenter: $ENV
logLevel: debug
imagePullPolicy: Always
tls:
enabled: true
tolerations: |
- key: "Internal"
operator: "Equal"
value: "true"
acls:
manageSystemACLs: true
tolerations: |
- key: "Internal"
operator: "Equal"
value: "true"
gossipEncryption:
autoGenerate: true
tolerations: |
- key: "Internal"
operator: "Equal"
value: "true"
connectInject:
enabled: false
server:
enabled: true
storageClass: gp3
replicas: 2
bootstrapExpect: 2
persistentVolumeClaimRetentionPolicy:
whenDeleted: Retain
whenScaled: Retain
tolerations: |
- key: "Internal"
operator: "Equal"
value: "true"
dns:
enabled: false
ui:
enabled: true
ingressClassName: alb
service:
enabled: true
type: LoadBalancer
ingress:
enabled: true
hosts:
- host: $HOST
paths:
- /
annotations: |
'kubernetes.io/ingress.class': alb
'alb.ingress.kubernetes.io/group.name': ${PREFIX}-eks
'alb.ingress.kubernetes.io/target-type': instance
'alb.ingress.kubernetes.io/ssl-redirect': '443'
'alb.ingress.kubernetes.io/scheme': internal
'alb.ingress.kubernetes.io/listen-ports': '[{"HTTPS": 443}]'
'alb.ingress.kubernetes.io/load-balancer-name': ${PREFIX}-eks-alb
'alb.ingress.kubernetes.io/security-groups': $ALB_SG
'alb.ingress.kubernetes.io/certificate-arn': $CERT_ARN
'alb.ingress.kubernetes.io/subnets': $SUB_A,$SUB_B
'alb.ingress.kubernetes.io/ssl-policy': ELBSecurityPolicy-TLS13-1-2-2021-06
'alb.ingress.kubernetes.io/healthcheck-port': traffic-port
'alb.ingress.kubernetes.io/backend-protocol': HTTP
'alb.ingress.kubernetes.io/backend-protocol-version': HTTP1
Ответ или решение
Установка Consul в кластере EKS с помощью Helm – это привлекательное решение для управления сервисами и обеспечением взаимодействия между ними в облачной среде. Однако, сложности с настройкой ALB (Application Load Balancer) вместо NLB (Network Load Balancer) могут вызвать затруднения. Ниже приведены теоретические аспекты, примеры и их применение для решения данной проблемы.
Теория
В Kubernetes используется Ingress для маршрутизации внешнего трафика к сервисам внутри кластера. AWS ALB Controller интегрируется с Kubernetes и используется для создания ALB ресурсов на основе ingress манифестов. В этом случае вы устанавливаете ALB для подсистемы, которая требует специфической конфигурации для корректного функционирования с Consul UI.
Основные моменты, которые следует учитывать при настройке Helm и ALB:
- Классы Ingress: Используйте правильный
ingress.class
для вашего ALB. - Аннотации: Убедитесь, что все необходимые аннотации для ALB добавлены в определение ingress.
- Безопасность: ALB требует правильной настройки сертификатов SSL/TLS и групп безопасности.
- Подсети и маршрутирование: Убедитесь, что подсети EKS правильно сконфигурированы и имеют внутри себя достаточные разрешения для создания ресурсов ALB.
Пример
Давайте рассмотрим ваш YAML файл более детально. Основная проблема, вероятно, заключается в неправильной конфигурации аннотаций для ingress или в самом определении ingress:
ui:
enabled: true
ingressClassName: alb
service:
enabled: true
type: LoadBalancer
ingress:
enabled: true
hosts:
- host: $HOST
paths:
- /
annotations: |
'kubernetes.io/ingress.class': alb
'alb.ingress.kubernetes.io/group.name': ${PREFIX}-eks
...
'alb.ingress.kubernetes.io/ssl-redirect': '443'
...
Применение
-
Проверка аннотаций: Убедитесь, что аннотации ingress корректны. Каждая аннотация несет важную информацию для маршрутизации и безопасности:
'kubernetes.io/ingress.class': alb
: Убедитесь, что контроллер ALB активен в вашем кластере и слушает именно этот класс.'alb.ingress.kubernetes.io/scheme': internal
: Этот настройка указывает на внутренний ALB. Если требуется публичный доступ, измените её наinternet-facing
.
-
Serivce type: Текущий
type: LoadBalancer
может вызвать создание дополнительного NLB. Проверьте, что у вас активен необходимый модуль AWS Load Balancer Controller. -
Сертификаты и безопасность: Поддержание связи по HTTPS требует, чтобы сертификат ARN был действительным и доступным для ALB:
'alb.ingress.kubernetes.io/certificate-arn': $CERT_ARN
- SSL-политики должны точно соответствовать требованиям вашей организации.
-
Сетевые настройки: Подсети, указанные в аннотации:
'alb.ingress.kubernetes.io/subnets': $SUB_A,$SUB_B
должны быть внутри тех же областей, что и все остальные ресурсы EKS. Кроме того, убедитесь, что IAM policies вашего EKS, включают все необходимые разрешения для создания ALB.
-
Проверка ALB Controller logs: Для детального понимания, почему ALB не создается должным образом, проверяйте логи приложения ALB Controller.
-
Проверка DNS: Проверьте DNS-записи для домена $HOST, чтобы убедиться, что они указывают на ваш Load Balancer.
-
Проверка версии Helm и AWS Load Balancer Controller: Используйте последние версии этих инструментов, чтобы минимизировать проблемы совместимости.
Таким образом, с помощью указанных действий можно проанализировать проблемы с конфигурацией и предпринять шаги для их разрешения, чтобы успешно установить Consul с использованием ALB в вашем кластере EKS. Уделите внимание каждой детали настройки, что обеспечит стабильное развертывание и безболезненное использование ALB для доступа к интерфейсу Consul.