从aws ELB hostcheck获取400,以便在awsvpc网络模式下使用aws ECS中的django ALLOWED_HOSTS?

问题描述 投票:0回答:1

当使用awsvpc网络模式转移到ECS时,我的ALB说所有主机都不健康,因为检查/status/会产生400s。我已经将它缩小到ALLOWED_HOSTS的问题。

如何让我的网络应用程序给ELB Healthchecker 200?

django amazon-ecs amazon-elb aws-load-balancer aws-application-load-balancer
1个回答
0
投票

我提出的解决方案是在你的设置中,做

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

© www.soinside.com 2019 - 2024. All rights reserved.