我创建了一个四子网 VPC,其中两个子网是私有的,两个是公共的。私有子网中的实例只有私有 IP,并通过 IGW/NAT GW 访问互联网。
我可以成功创建跨公共子网的 ECS 集群,但是当我在后端子网中创建集群时,集群实例无法在集群中注册。
我怀疑是网络问题,正在使用 Flowlogs 进行调试。同时,我希望有人能解释一下需要打开哪些端口,或者 ECS 集群管理中涉及的其他配置。
答案1
我怀疑这与端口有关,因为集群中的事物需要通信是相当标准的。下面的两篇文章应该可以为您解答这个问题。在我看来,以下内容可能是必需的
- Amazon ECS 代理端口 51678 和 51679(未指定协议)
- TCP 2376 和 2377 (docker)
- TCP/UDP 7946(码头工人)
- UDP 4789(docker)
- 临时端口 49153 至 65535(未指定协议)
请注意,我对 ECS 了解甚少,只是在 Google 上搜索了几次并阅读了文档。ECS 基于 Docker,所以我查看了它。需要进行一些实验。
Digital Ocean 有一篇很好的文章Docker 端口。
TCP 端口 2376 用于安全的 Docker 客户端通信。此端口是 Docker Machine 工作所必需的。Docker Machine 用于编排 Docker 主机。TCP 端口 2377。此端口用于 Docker Swarm 或集群的节点之间的通信。只需在管理器节点上打开它。TCP 和 UDP 端口 7946 用于节点之间的通信(容器网络发现)。UDP 端口 4789 用于覆盖网络流量(容器入口网络)。
然后亚马逊文档提到了一些相同的端口。
默认的临时端口范围是 49153 到 65535,此范围用于 1.6.0 之前的 Docker 版本。对于 Docker 1.6.0 及更高版本,Docker 守护程序会尝试从 /proc/sys/net/ipv4/ip_local_port_range 读取临时端口范围;如果此内核参数不可用,则使用默认的临时端口范围。您不应尝试在临时端口范围内指定主机端口,因为这些端口是为自动分配保留的。通常,32768 以下的端口不在临时端口范围内。
默认预留端口为 SSH 的 22、Docker 端口 2375 和 2376 以及 Amazon ECS 容器代理端口 51678 和 51679。正在运行的任务中先前指定的任何主机端口在任务运行时也会被预留(任务停止后,主机端口将被释放)。当前预留端口显示在 DescribeContainerInstances 输出的 remainingResources 中,容器实例一次最多可以有 100 个预留端口,包括默认预留端口(自动分配的端口不计入 100 个预留端口的限制)。
请注意,根据维基百科并且临时端口范围下面的评论可能需要扩展。
答案2
请务必记住,包含 NAT 网关的子网的网络 ACL 需要一条入站 SSL (443) 规则。如果没有,则无法从私有子网进行出站 SSL。从我的私有子网到http://cloudformation.eu-central-1.amazonaws.com/在子网级别被阻止。
这使得在后端实例上运行的 shell 命令cfn 信号阻止。cfn-signal 命令的职责是向 Cloud Formation 报告实例已启动并正在运行,以便脚本可以继续创建依赖资源。
我认为这是 ECS 的问题,而不是 Cloudformation 的问题。