根据文档,可以分配为 docker 发布端口(动态端口)的 EC2 主机端口是临时端口范围:49153–65535 和 32768–61000。
在我看来他们是过度包装(49153-61000?),但这是文件所说的。应该是32768-65535?请有人解释原因。
例如,您可以看到端口 32776 是为 ECS 任务容器动态分配的。
$ sudo status ecs
ecs start/running, process 3176
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b95c013c6ba *****.dkr.ecr.us-east-2.amazonaws.com/\ecs_monolith_myecs/xyz "node server.js" 3 minutes ago Up 3 minutes 0.0.0.0:32776->3000/tcp ecs_monolith_ABC-1-XYZ-feb4d68dd3d2bfad7500
dbe356e8de8c amazon/amazon-ecs-agent:latest "/agent" 45 minutes ago Up 45 minutes (healthy) ecs-agent
因此,我们可以为来自 ELB targat 组的传入流量开放 49153–65535 和 32768–61000(或 32768-65535),ECS 服务正在为动态端口映射更新这些流量。
使用 ALB 的安全组 (SG)
对于 ALB,我们可以限制来自附加到 ALB 的 SG 的流量。但是 NLB 没有 SG,原因似乎是 NLB 没有在 EC2 上运行,因此没有 SG,因为 ALB 在 EC2 上运行,因此有 SG。
NLB 在您的 VPC 中显示为 ENI,但实际上并非如此。它是我们称为 HyperPlane 的组件的扩展。而 ALB 和 CLB 在 AWS 管理的 EC2 实例上运行,因此它们具有附加的“真实”ENI,因此能够使用安全组。
使用 ELB IP CIDR 块
NLB 有一个静态 IP。但是,如果ELB的目标组的目标类型是instance,则源IP保留为Target Groups for Your Network Load Balancers。
如果您使用实例 ID 指定目标,则会保留客户端的源 IP 地址并将其提供给您的应用程序。
如果您按 IP 地址指定目标,则源 IP 地址是负载均衡器节点的私有 IP 地址。如果您需要客户端的 IP 地址,请启用代理协议并从代理协议标头中获取客户端 IP 地址。
如果ECS的网络模式是awsvpc,那么我们可以使用IP来确保流量只来自NLB,否则看起来除了使用外部客户端IP范围之外没有办法限制来源。