aws-vpc容器无法访问互联网

时间:2019-08-31 20:41:53

标签: amazon-web-services amazon-ecs amazon-vpc

我在AWS ECS集群中创建了ECS服务。 我的容器使用awsvpc网络模式。该服务没有负载均衡器。

但是它不能触及任何公共互联网资源。

当我进入ECS实例并通过SSH进入docker容器时,我无法获取任何公共资源。

root@ip-10-3-1-23:/app# traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  *^C
root@ip-10-3-1-23:/app# wget google.com
--2019-08-31 22:34:38--  http://google.com/
Resolving google.com (google.com)... 172.217.9.206, 2607:f8b0:4004:807::200e
Connecting to google.com (google.com)|172.217.9.206|:80... ^C
root@ip-10-3-1-23:/app# 

EC2实例安全组:

入站:

Type            Protocol        Port Range      Source                      Description
All TCP         TCP             0 - 65535       10.3.0.0/16     
SSH             TCP             22              sg-5c260123 (mgmt-bastion)  
Custom TCP Rule TCP             51678           sg-0784b8f53ab37c234 (mgmt-jenkins-sg)

出站:

Type            Protocol        Port Range      Source                      Description
All traffic     All             All             0.0.0.0/0

服务安全组:

入站:

Type            Protocol        Port Range      Source                      Description
All TCP         TCP             0 - 65535       10.3.0.0/16

出站:

Type            Protocol        Port Range      Source                      Description
All traffic     All             All             0.0.0.0/0

请您帮我调试一下,如何允许Internet访问?

2 个答案:

答案 0 :(得分:4)

来自AWS Documentation

  

对于使用EC2启动类型的任务,awsvpc网络模式不为任务ENI提供公共IP地址。 要访问Internet,必须在配置为使用NAT网关的专用子网中启动使用EC2启动类型的任务。有关更多信息,请参阅Amazon VPC用户指南中的NAT网关。入站网络访问必须使用私有IP地址或DNS主机名从VPC内进行,或者必须通过VPC内部的负载平衡器进行路由。在公共子网中启动的任务没有出站网络访问权限。

答案 1 :(得分:1)

我通过在创建ECS任务的子网的路由表中添加一个条目来解决此问题。

Destination       Target 
10.3.0.0/16       local
0.0.0.0/0         nat-02dcc4c6b32bdae00