【问题标题】:Application load balancer distributing between elastic beanstalk and kubernetes在弹性 beantalk 和 kubernetes 之间分配的应用程序负载均衡器
【发布时间】:2020-01-28 17:52:06
【问题描述】:

我们需要能够根据 url 路径将请求指向不同的应用程序。在我们的例子中,我们有一个用于一个服务的弹性 beanstalk 应用程序和一个用于另一个服务的 kubernetes 集群。我们需要能够将请求作为 api.example.com/service1 路由到弹性 beanstalk 和 api.example.com/service2 到 kubernetes。

我们在 SO 上遇到了这个问题/答案: Load balancing across different Elastic Beanstalk applications

按照步骤将我们创建的新应用程序负载均衡器指向的目标组关联到 EB 环境的 Auto Scaling 组后,对 /service1 的请求实际上有效,但只有大约一半的时间。另一次请求只是超时并且没有收到响应。

为了排除安全组问题,我们暂时向所有流量开放了 Elastic Beanstalk 实例安全组,但此问题仍然存在。

这里是应用程序负载均衡器规则,显示全部转发给“每个人”目标组。 “everbody”目标组是附加到 EB 环境的 Auto Scaling 组的新目标组。

这里是目标组下的注册目标,显示了 3 个健康的实例。

是否有人能够看到我们可能做错了导致这些间歇性问题的事情?

【问题讨论】:

    标签: amazon-web-services kubernetes amazon-elastic-beanstalk


    【解决方案1】:

    您需要一个全局负载平衡器来管理两个集群。您可以使用代理作为全局负载均衡器,例如 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-23
      • 2020-07-06
      • 1970-01-01
      • 2021-05-26
      • 2019-08-09
      • 2019-10-21
      • 2021-09-22
      • 2021-03-08
      相关资源
      最近更新 更多