【发布时间】:2017-06-16 21:19:03
【问题描述】:
我正在尝试将 Amazon API Gateway 放在 Application Load Balancer 的前面,以平衡我的 ECS 集群的流量,我的所有微服务都在其中部署。使用 API Gateway 的动机是通过 lambda 函数使用自定义授权器。
系统图
用亚马逊的话 (https://aws.amazon.com/api-gateway/faqs/):“对后端操作的代理请求也需要在 Internet 上公开访问”。这迫使我将 ELB 公开(面向互联网)而不是内部。然后,我需要一种方法来确保只有 API 网关能够访问 VPC 之外的 ELB。
我的第一个想法是在 API 网关中使用客户端证书,但 ELB 似乎不支持它。
任何想法都将受到高度赞赏!
【问题讨论】:
-
我认为没有简单的解决方案。 API Gateway 不适合您,或者您必须做更多的事情。解决方案包括将 HAProxy 放在将验证客户端证书的 ALB 之前。或者在 ALB 之前放置一个 lambda,但这将需要缓冲整个响应,这可能会减慢速度。或者,如果您随后可以将秘密标头注入到从 API 网关到 ALB 的请求中。然后将在后端验证此秘密。我不推荐 IP 白名单,因为 API 网关的 IP 范围不是静态的,并且可以更改中断内容。
-
谢谢@doorstuck。我想避免合并像 HAProxy 这样的新组件。我猜这种场景(API 网关、ELB、ECS 集群)很常见。 AWS 不为其提供开箱即用的解决方案吗?
-
API Gateway 更适合 Lambda 函数服务。当放在带有托管服务的 docker 容器前面时,我觉得它增加了太多的延迟和复杂性。我使用另一个代理而不是 API Gateway,因为无论如何我只使用 API Gateway 的代理部分。我成功地使用了 Zalando 的 Skipper。但是,如果您想使用授权者、云端缓存等,那么 API 网关仍然是可行的方法。
-
谢谢。我在我的 VPC 中创建了一个 lambda 来代理请求,但我不喜欢这种方法,因为它增加了延迟和复杂性。我最终用开源 TyK 替换了 Amazon API Gateway。
标签: amazon-web-services aws-api-gateway amazon-ecs amazon-elb aws-application-load-balancer