通过 API 网关安全路由的 ECS 容器未返回,但容器的运行状况检查良好
Posted
技术标签:
【中文标题】通过 API 网关安全路由的 ECS 容器未返回,但容器的运行状况检查良好【英文标题】:ECS containers securely routed via API Gateway not returning but health check on containers is good 【发布时间】:2021-03-28 02:46:41 【问题描述】:好的,这将是一个长篇,但我想确保我解释一下。我正在尝试做一个概念证明,我们可以通过 ECS 部署使用 API 网关公开的微服务,以便我们可以利用 lambda 授权者和认知。
为了实现这一点,我一直在 Medium 上关注本指南
然而,一旦我部署了我的网关,我就会遇到以下错误:
Cannot GET /node-demo
让我了解一下基础知识,我有一个基本的 express 应用程序,如下所示:
const express = require('express')
const PORT = process.env.PORT || 3000
const app = express()
app.get('/', (request, response) =>
return response.json(
data:
message: `API is functional`,
,
)
)
app.listen(PORT, () => console.log(`App running on port $PORT`))
Dockerfile 看起来像这样:
FROM mhart/alpine-node:10.16.3
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY index.js .
CMD ["npm", "start"]
这个 docker 镜像已经被推送到 ECR,我已经创建了一个带有环境变量 PORT => 80
的任务定义
在我的集群上创建了一个运行良好的服务。然后创建了一个 ALB,其目标组指向我的容器,这些都恢复正常!
然后我使用以下内容路由到这些目标:
然后,我的 NLB 指向 ALB,并且我在 ALB 上允许了正确的 IP,因此我们可以通过安全组访问它。 NLB 目标组中的两个 IP 都是健康的
在 API Gateway 中创建 VPC 链接,然后创建如下资源:
然后,我在最后部署带有/node-demo
的 URL 并得到上面的初始错误。要么指南有错误,要么我做错了什么。
【问题讨论】:
添加建议进行一些测试以隔离问题。可以直接调用ECS内部IP吗?如果成功,则问题出在路由上。此外,请检查您的安全组并确保将端口和 IP/子网列入白名单。 打内部 IP 的问题是我在哪里做那个表格? 为什么要同时拥有 ALB 和 NLB? API Gateway -> NLB -> ECS 服务不是更好吗? 我只是从那个指南开始,我会试一试! 啊,我记得为什么,ALB 意味着我可以有多个目标组,然后我可以在不同的 url 下路由,即 /test /demo 等 【参考方案1】:好消息和坏消息,
好消息,我已经解决了问题。
坏消息,超级简单
只需要添加一个路由到 express 应用,
/node-demo
【讨论】:
以上是关于通过 API 网关安全路由的 ECS 容器未返回,但容器的运行状况检查良好的主要内容,如果未能解决你的问题,请参考以下文章