Применение распределителя нагрузки, распределяющего между эластичным бобовым стеблем и кубернетом - PullRequest
1 голос
/ 29 сентября 2019

Нам нужно иметь возможность направлять запросы в разные приложения на основе пути URL.В нашем случае у нас есть приложение гибкого beanstalk для одного сервиса и кластер kubernetes для другого.Нам нужно иметь возможность направлять запросы как api.example.com/service1 на эластичный beanstalk и api.example.com/service2 к kubernetes.

Мы натолкнулись на этот вопрос / ответ по SO: Балансировка нагрузки между различными приложениями Elastic Beanstalk

После выполнения шагов по привязке целевой группы, на которую указывает новое приложениебалансировщик нагрузки, который мы создали для группы автоматического масштабирования среды EB, запросы к / service1 фактически работают, но только примерно в два раза быстрее.В другой раз запросы просто превышают время ожидания, а ответ не поступает

Чтобы исключить проблемы с группами безопасности, мы временно открыли группу безопасности экземпляра Elastic Beanstalk для всего трафика, но эта проблема сохраняется.

Вот правила балансировки нагрузки приложения, показывающие переадресацию всех в целевую группу «все».Целевая группа "everbody" - это новая целевая группа, присоединенная к группе автоматического масштабирования среды EB.application load balancer rules showing forward all to

Вот зарегистрированные цели в целевой группе, показывающие 3 здоровых экземпляра.registered targets

Кто-нибудь может увидеть что-то, что мы можем делать неправильно, чтобы вызвать эти неустойчивые проблемы?

1 Ответ

0 голосов
/ 29 сентября 2019

Вам нужен глобальный балансировщик нагрузки для управления двумя кластерами.Вы можете использовать прокси в качестве глобального балансировщика нагрузки, например, haproxy, envoy.Теперь в этой ситуации вы dns будете указывать на прокси, а затем прокси будет маршрутизировать трафик между эластичным beanstalk и кластером Kubernetes.

envoy.yml

  static_resources:
  listeners:
  - address:
      socket_address:
        address: 0.0.0.0
        port_value: 80
    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
          codec_type: auto
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: backend
              domains:
              - "*"
              routes:
              - match:
                  prefix: "/service/1"
                route:
                  cluster: service1
              - match:
                  prefix: "/service/2"
                route:
                  cluster: service2
          http_filters:
          - name: envoy.router
            typed_config: {}
  clusters:
  - name: service1
    connect_timeout: 0.25s
    type: strict_dns
    lb_policy: round_robin
    http2_protocol_options: {}
    load_assignment:
      cluster_name: service1
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: service1
                port_value: 80
  - name: service2
    connect_timeout: 0.25s
    type: strict_dns
    lb_policy: round_robin
    http2_protocol_options: {}
    load_assignment:
      cluster_name: service2
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: service2
                port_value: 80
admin:
  access_log_path: "/dev/null"
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 8001

Dockerfile

FROM envoyproxy/envoy-dev:98c35eff10ad170d550fb5ecfc2c6b3637418c0c

COPY envoy.yaml /etc/envoy/envoy.yaml

Google только что запустил Traffic Director и Traffic Director также работают в качестве глобального балансировщика нагрузки.Смотрите этот конф Traffic Director

...