Установка consul-k8s через helm не удалась.

Вопрос или проблема

Я пытаюсь установить 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:

  1. Классы Ingress: Используйте правильный ingress.class для вашего ALB.
  2. Аннотации: Убедитесь, что все необходимые аннотации для ALB добавлены в определение ingress.
  3. Безопасность: ALB требует правильной настройки сертификатов SSL/TLS и групп безопасности.
  4. Подсети и маршрутирование: Убедитесь, что подсети 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'
      ...

Применение

  1. Проверка аннотаций: Убедитесь, что аннотации ingress корректны. Каждая аннотация несет важную информацию для маршрутизации и безопасности:

    • 'kubernetes.io/ingress.class': alb: Убедитесь, что контроллер ALB активен в вашем кластере и слушает именно этот класс.
    • 'alb.ingress.kubernetes.io/scheme': internal: Этот настройка указывает на внутренний ALB. Если требуется публичный доступ, измените её на internet-facing.
  2. Serivce type: Текущий type: LoadBalancer может вызвать создание дополнительного NLB. Проверьте, что у вас активен необходимый модуль AWS Load Balancer Controller.

  3. Сертификаты и безопасность: Поддержание связи по HTTPS требует, чтобы сертификат ARN был действительным и доступным для ALB:

    • 'alb.ingress.kubernetes.io/certificate-arn': $CERT_ARN
    • SSL-политики должны точно соответствовать требованиям вашей организации.
  4. Сетевые настройки: Подсети, указанные в аннотации:

    • 'alb.ingress.kubernetes.io/subnets': $SUB_A,$SUB_B должны быть внутри тех же областей, что и все остальные ресурсы EKS. Кроме того, убедитесь, что IAM policies вашего EKS, включают все необходимые разрешения для создания ALB.
  5. Проверка ALB Controller logs: Для детального понимания, почему ALB не создается должным образом, проверяйте логи приложения ALB Controller.

  6. Проверка DNS: Проверьте DNS-записи для домена $HOST, чтобы убедиться, что они указывают на ваш Load Balancer.

  7. Проверка версии Helm и AWS Load Balancer Controller: Используйте последние версии этих инструментов, чтобы минимизировать проблемы совместимости.

Таким образом, с помощью указанных действий можно проанализировать проблемы с конфигурацией и предпринять шаги для их разрешения, чтобы успешно установить Consul с использованием ALB в вашем кластере EKS. Уделите внимание каждой детали настройки, что обеспечит стабильное развертывание и безболезненное использование ALB для доступа к интерфейсу Consul.

Оцените материал
Добавить комментарий

Капча загружается...