当使用awsvpc网络模式转移到ECS时,我的ALB说所有主机都不健康,因为检查/status/
会产生400s。我已经将它缩小到ALLOWED_HOSTS的问题。
如何让我的网络应用程序给ELB Healthchecker 200?
我提出的解决方案是在你的设置中,做
ELB_HEALTHCHECK_HOSTNAMES = [ip for network in
requests.get(os.environ['ECS_CONTAINER_METADATA_URI']).json()['Networks']
for ip in network['IPv4Addresses']]
ALLOWED_HOSTS += ELB_HEALTHCHECK_HOSTNAMES
这将从连接到容器的每个网络中获取每个IP,并将其添加到您的ALLOWED_HOSTS。
在使用awsvpc网络模式转移到ECS之前,我们很多人都熟悉这条线路,它检索EC2实例的IP,它由ELB运行状况检查器用作主机名:
ELB_HEALTHCHECK_HOSTNAME = requests.get('http://169.254.169.254/latest/meta-data/local-ipv4', timeout=2).text
具有awsvpc网络的ECS下的此行检索EC2实例的IP,而不是连接到容器的ENI。要检索ENI的IP,请在环境变量$ {ECS_CONTAINER_METADATA_URI}中向端点发送请求
这将返回有关容器的有用元数据,包括IPV4
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-metadata-endpoint-v3.html