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

Posted

技术标签:

【中文标题】aws-vpc 容器无法访问互联网【英文标题】:aws-vpc containers do not have access to the internet 【发布时间】:2020-01-04 13:52:10 【问题描述】:

我在 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

你能帮我调试一下吗,请问如何允许上网?

【问题讨论】:

【参考方案1】:

来自AWS Documentation:

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

【讨论】:

是的,我在 20 分钟前找到了它,并将此任务移至私有子网。 :) 完成后我会更新结果。谢谢,这是解决方案! :) 我遇到了完全相同的问题,但我将 EC2 节点放置在应直接连接互联网的公共子网中,但在主机连接时任务无法访问互联网。 @RuBiCK,你解决问题了吗?我做了完全一样的事情,但是容器无法访问互联网 @slesh 是的,我解决了这个问题,但我参与了几个项目,但我不记得我做了什么。我认为这是一个路由问题,也是服务或容器的网络模式。如果您希望我检查具体配置,请告诉我【参考方案2】:

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

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

【讨论】:

有趣的是,当我做同样的事情时,我无法在运行任务的地方 ssh 我的 ec2 你使用公网IP还是私网IP来SSH?尝试使用以下步骤调试它:1)在实例SG中允许来自整个互联网的所有流量,然后您可以尝试SSH,2)检查您是否可以ping您的实例3)然后检查您的网络ACL 满足所有这些要求。我使用公共 ip 来 ssh。不知道我失去 ssh 访问权限的原因是什么......

以上是关于aws-vpc 容器无法访问互联网的主要内容,如果未能解决你的问题,请参考以下文章

使用docker容器时 不能访问互联网

没有 --net=host 参数的 docker 容器内的网络无法访问

端口映射与容器互联

7.Docker技术入门与实战 --- 端口映射与容器互联

docker端口映射与容器互联

第七章 端口映射与容器互联