我在AWS上有一个下面的软件,其中部分应用程序运行在EC2实例上,另一部分运行在ECS集群上。
我很难让运行在EC2实例上的应用程序访问运行在ECS上的特定容器。更清楚的是,我需要在ECS上的EC2 access Redis上使用我的应用程序。做这种整合是可能的吗?
应用程序的两个部分都位于同一个VPC中,并且拥有授权彼此访问的安全组。
更多上下文:
每次在ECS Fargate中提供任务定义时,集群服务上的公共/私有网络IP都会发生变化。为了能够访问这些服务,Amazon提供了服务发现配置,每当ECS网络发生更改时,该配置将更新DNS托管区域。
我的问题是在我的EC2实例中使用这个托管区域。我可以通过IP直接访问ECS容器,但这不是理想的方案。每当提供服务时,IP地址就会不断变化。另一方面,在我的EC2实例中,路由53名称服务器总是显示为未知。
我的云配置如下:
任务定义
{
"family": "******",
"requiresCompatibilities": ["FARGATE"],
"executionRoleArn": "arn:aws:iam::******",
"networkMode": "awsvpc",
"runtimePlatform": {
"operatingSystemFamily": "LINUX"
},
"cpu": "2048",
"memory": "4096",
"containerDefinitions": [
{
"name": "redis",
"image": "redis:alpine",
"portMappings": [
{
"containerPort": 6379,
"hostPort": 6379
}
]
}
]
}ECS服务配置
ECS服务网络设置:

53号公路
为ECS中的服务启用了容器自动发现:

无论何时提供ECS服务,都会更新A记录IP。
EC2实例的ECS安全组入站规则:
对于来自EC2实例的连接,我的ECS容器是打开的。通过ECS服务IP与Redis的连接是成功的,但是通过生成的名称服务器的连接并不成功。

发布于 2022-03-21 19:55:47
首先,我想知道,为什么要在ECS Fargate中运行redis而不是使用Amazon https://aws.amazon.com/elasticache?
但是,如果您真的想这样做,您至少应该有以下配置:
f 210
将所有服务都放在同一个安全组中,或者与相应的安全组一起添加入站/出站。不要忘记添加端口6379 fir入站/出站规则。
直接指向容器并不是一个好做法,因为重新启动/缩放容器将改变ip地址。
如果您比较ALB或北草坪会议大楼的成本(这样做,我希望ALB与端口6379端口上的侦听器进行比较)和Fargate的成本,您将能够使用一个中等大小的Elasticache的t3/t4g实例。
我对“自托管”或“托管服务”做了很多比较,如果有来自AWS的替代托管服务,那么您自己运行服务的理由就不多了。
https://stackoverflow.com/questions/71558667
复制相似问题