动态端口和AWS Applocation负载均衡器和ECS

时间:2016-10-03 13:07:31

标签: amazon-web-services amazon-elb amazon-ecs aws-security-group

ELB后面的Docker容器获得动态端口,这些端口自动注册到ELB,以便它们可以将流量重定向到它们。

为了使您的Web服务器可供ELB访问,您必须打开来自安全组内的所有这些端口1024 - 65535。

有没有办法不必在一系列端口上打开一个安全组,只能打开ELB正在使用的底池?

3 个答案:

答案 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.

如果您真正关心哪些端口,我可以看到一些选项:

  1. 不专门使用ALB和转发端口,因此您可以在ELB安全组中指定它们。
  2. 将ALB放在与应用程序相同的安全组中,并对TCP 0-65535使用sg-foo等内部安全组规则,其中sg-foo是ALB和应用程序所在的安全组
  3. 将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?请有人解释原因。

  • How do I set up dynamic port mapping for Amazon ECS?

    如果正确设置了动态端口映射,那么您将在目标组中看到已注册的目标以及为任务分配的端口。您还将在以下临时端口范围的已注册目标中看到该任务: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的安全组(hg)

对于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范围外,似乎没有其他方法来限制来源。