我正在运行HAProxy的容器实例,该实例以NLB开头,以代理来自私有子网的Postgres / RDS实例的流量。我的haproxy.cfg
文件如下所示:
listen postgres_rds
bind *:5432
mode tcp
timeout client 10800s
timeout connect 10800s
timeout server 10800s
server primary ${RDS_URL}:5432
listen stats # Define a listen section called "stats"
bind :9000 # Listen on localhost:9000
mode http
stats enable # Enable stats page
stats hide-version # Hide HAProxy version
stats realm Haproxy\ Statistics # Title text for popup window
stats uri / # Stats URI
因此,正如您所看到的,我已经将容器设置为将端口5432上的流量转发出去,并且还将容器中的端口9000设置为运行状况检查。
在Amazon ECS中,我已将此容器配置为使用动态端口。换句话说,这是任务定义的端口映射部分:
"portMappings": [
{
"hostPort": 0,
"protocol": "tcp",
"containerPort": 5432
},
{
"hostPort": 0,
"protocol": "tcp",
"containerPort": 9000
}
],
我将容器作为ECS服务运行。我的目标是能够根据需要扩展此服务。但是(目标组中的)任何目标都没有表现出健康状态,因此它会不断循环执行ECS任务-分解新任务并拆除旧任务,而没有将这些任务标记为健康且稳定。
我看到任务正在将这两个端口分配给ECS主机实例上的临时/动态端口。而且我还可以看到负载均衡器将端口5432正确转发到了相应的动态端口。但是,目标组的运行状况检查设置似乎无法类似地进行该动态映射。我在目标组运行状况检查中仅有的选项是“流量端口”(在这种情况下,也就是映射到容器端口5432的动态端口)或静态端口。
我尝试在运行状况检查中设置静态端口,但是这当然不起作用,因为它没有使用静态端口。我开始认为这根本不可能,但我希望能证明自己是错误的。有什么方法可以使用单独的动态端口进行目标组的运行状况检查?或什至不是现在,有什么东西可以允许这种行为?