ELB后面的Docker容器获得动态端口,这些端口自动注册到ELB,以便它们可以将流量重定向到它们。
为了使您的Web服务器可供ELB访问,您必须打开来自安全组内的所有这些端口1024 - 65535。
有没有办法不必在一系列端口上打开一个安全组,只能打开ELB正在使用的底池?
答案 0 :(得分:4)
AWS永远不会修改安全组,因为这可能会导致冲突和安全问题。唯一的例外是Elastic Beanstalk等服务。你可能不得不做论坛所说的并允许端口范围。
每http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_PortMapping.html
The default ephemeral port range is 49153 to 65535, and this range is used for Docker versions prior to 1.6.0. For Docker version 1.6.0 and later, the Docker daemon tries to read the ephemeral port range from /proc/sys/net/ipv4/ip_local_port_range; if this kernel parameter is unavailable, the default ephemeral port range is used. You should not attempt to specify a host port in the ephemeral port range, because these are reserved for automatic assignment. In general, ports below 32768 are outside of the ephemeral port range.
如果您真正关心哪些端口,我可以看到一些选项:
TCP 0-65535
使用sg-foo
等内部安全组规则,其中sg-foo
是ALB和应用程序所在的安全组sg-foo
,并将规则放在sg-app
上(其中sg-app
是您的应用所在的安全组)并允许来自TCP 0-65535
的流量sg-foo
内的sg-app
答案 1 :(得分:1)
在容器实例安全组中,将传入流量限制为端口范围32768-65535以及VPC和负载均衡器的相关子网CIDR(例如10.0.0.0/16)。
答案 2 :(得分:1)
根据文档,可以分配为docker发布的端口(动态端口)的EC2主机端口是临时端口范围:49153–65535和32768–61000。
在我看来,它们包装过度(49153-61000?),但这是文件中所说的。应该是32768-65535?请有人解释原因。
如果正确设置了动态端口映射,那么您将在目标组中看到已注册的目标以及为任务分配的端口。您还将在以下临时端口范围的已注册目标中看到该任务:49153–65535和32768–61000。
例如,您可以看到端口 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
因此,我们可以打开49153–65535和32768–61000(或32768-65535),以接收来自ECS服务为动态端口映射而更新的ELB targat组的传入流量。
对于ALB,我们可以限制来自连接到ALB的SG的流量。但是NLB没有SG,原因似乎是NLB没有在EC2上运行,因此没有SG,而ALB在EC2上也因此在SG上运行。
NLB在您的VPC中显示为ENI,但实际上不是。它是我们称为HyperPlane的组件的扩展。 ALB和CLB在由AWS管理的EC2实例上运行,因此它们具有“真实的” ENI,因此可以使用安全组。
NLB具有静态IP。但是,如果ELB目标组的目标类型是 instance ,则源IP将保留在Target Groups for Your Network Load Balancers中。
如果使用实例ID指定目标,则会保留客户端的源IP地址并将其提供给您的应用程序。
如果按IP地址指定目标,则源IP地址是负载均衡器节点的专用IP地址。如果需要客户端的IP地址,请启用“代理协议”,然后从“代理协议”标头中获取客户端IP地址。
如果ECS的网络模式是awsvpc,那么我们可以使用IP来确保流量仅来自NLB,否则,除了使用外部客户端IP范围外,似乎没有其他方法来限制来源。