AWS API网关VPC链接到ELB,返回ApiGateway日志中HTTP503不可用的服务,但ELB日志中没有



我在设置到现有ELB的AWS API网关VPC链接以使私有端点公开时遇到问题。

浏览到API网关端点时收到的错误为{"message":"Service Unavailable"}

这是项目设置。

  1. 专有专有网络内的EC2实例
  2. EC2添加到具有端口80侦听器的目标组
  3. 使用两个规则创建ELB:1(HTTP:80到HTTPS:443 2(HTTPS到#2中的目标组
  4. EC2使用的Sec组仅允许从ELB进行HTTP访问
  5. ELB上的Sec组允许来自特定IP的HTTPS流量
  6. 为与#1相同的VPC创建的VPC链路,包括所有3个子网。创建了新的Sec组,允许所有人进行HTTPS通信
  7. #5中的Sec组(ELB(设置为允许来自#6中创建的SecGroup的HTTP和HTTPS请求(VPC链接(
  8. 已创建HTTP API网关
  9. 创建了API网关路由/sample/{proxy+},使用集成设置作为专用资源ALB/BLB,指向#3中的ELB,侦听器为HTTP(也尝试了HTTPS(,方法为ANY,VPC LInk设置为#6中创建的链接
  10. 为API网关启用Cloudwatch日志$default阶段
  11. ELB日志记录启用到S3

主平台适用于通过ELB通过HTTPs连接的用户,但对API网关端点的任何请求都要等待一段时间,然后返回带有{"message":"Service Unavailable"}主体的HTTP503响应

Cloudwatch日志显示HTTP503响应,但没有提供任何其他有用的信息。ELB日志显示没有任何带有请求URL的请求。

结果看起来好像VPC链路不工作,并且即使当ELB的SecGroup被设置为"允许"时,对ELB的请求也被ELB上的安全组拒绝;所有业务";来自VPC链路使用的SecGroup。

我不知道是什么导致了这个问题,希望有人能发现我一路上错过的东西。

我关注了各种AWS文档,包括:

  1. https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-stages.html
  2. https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-private.html
  3. https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-vpc-links.html

这些都没有提到SecGroup设置

当我创建HTTPURI集成并将其指向允许公共请求的端点时,我已经取得了成功。但这并不好,因为除了一个或两个端点之外,应用程序需要保持私有。

我所读到的一切都表明API网关->VPC链接->ELB->EC2方法应适用于

更新1

VPC链路设置

  1. VPC指向EC2实例所在的同一个VPC,与ELB为同一个专有网络
  2. 所有三个子网(172.30.0.0/20、172.30.16.0/20和172.30.32.0/20(均已启用
  3. 它有自己的SecGroup

API网关集成

选择方式:手动目标服务:ALB/NLB负载平衡器:SM-01-ELB侦听器:HTTP 80VPC链接:SM01-VPC链接

根据文档,它说:

VPC链接使您能够创建私有集成,将您的HTTP API路由连接到VPC 中的私有资源

您是否创建了位于私有子网中的ALB和VPC链路?我认为如果你使用并将其放置在私有子网中,你将无法成功连接到ALB。

您是否也可以检查VPC Link的ENI是否已创建?

我需要把我的问题放在这里,因为评论部分对我来说很小

我为此感到非常痛苦。我最终按照这些绝妙的指示解决了这个问题。

基本上将API网关路由到NLB,该NLB路由到ALB(在特定侦听器上(,并确保NLB仅在私有子网中。现在,您可以在API网关处理授权,并授予对专用端点的访问权限,同时仍然让ALB是公共的,并与不需要NLB引导的其他侦听器一起路由到其他地方。

相关内容

  • 没有找到相关文章

最新更新