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 容器无法访问互联网的主要内容,如果未能解决你的问题,请参考以下文章