我有一个简单的应用程序,我一直在尝试学习 aws。我首先创建了一个推送到 ecr 的 docker 镜像的 http 版本,ecs 使用它来创建服务和任务,使用由 codedeploy 控制的蓝绿部署进行应用程序负载平衡以及自动缩放。
http 版本运行良好,健康检查通过,没有问题。
现在我使用 https 创建了相同的应用程序,并分配了证书,但相同的应用程序未通过健康检查。
我修改了安全组以接收所有用于测试目的的请求,并通过 route53 为负载均衡器分配了一个域。
我收到 502 bad gateway 返回。
我不知道这是否与健康检查失败有关(我猜负载均衡器只是直接调用容器的 IP),但我不知道如何调试它,找不到办法找出健康检查失败的原因。
但是现在我尝试访问健康检查时,它抛出了 502,当我检查负载均衡器日志时,它显示了这一点(我修改了日志以使其更具可读性):
type https
time 2023-02-10T14:37:00.099726Z
elb app/myapp-load-balancer-staging/c6aabdb240600ca8
client:port myip:38255
target:port targetip:3000
request_processing_time -1
target_processing_time -1
response_processing_time -1
elb_status_code 502
target_status_code -
received_bytes 360
sent_bytes 277
"request" "GET https://api.myapp.com:3000/rest/health HTTP/1.1"
"user_agent" "PostmanRuntime/7.29.0"
ssl_cipher <some text>-SHA256
ssl_protocol TLSv1.2
target_group_arn arn:aws:elasticloadbalancing:eu-west-1:myaccountnumber:targetgroup/myapp-blue-target-staging/id
"trace_id" "Root=1-63e6568c-7c78be0f1e967e59370fbb80"
"domain_name" "api.myapp.com"
"chosen_cert_arn" "arn:aws:acm:eu-west-1:myaccountnumber:certificate/certid"
matched_rule_priority 0
request_creation_time 2023-02-10T14:37:00.096000Z
"actions_executed" "forward"
"redirect_url" "-"
"error_reason" "-"
"target:port_list" "172.31.2.112:3000"
"target_status_code_list" "-"
"classification" "Ambiguous"
"classification_reason" "UndefinedContentLengthSemantics"
这是我尝试呼叫端点的时候。
端口到处都匹配(3000),类型到处都是 HTTPS,证书也匹配,我不知道哪里出了问题,而且我不知道如何调试这个问题。
答案1
现在我使用 https 创建了相同的应用程序,并分配了证书,但相同的应用程序未通过健康检查。
如果您的负载均衡器的目标未通过健康检查,则负载均衡器不会向其发送任何流量。您可能已将健康检查中的协议更改为 HTTPS,但目标可能需要以前的协议。
您需要修复健康检查才能使其正常工作,您可以将健康检查改回来或让您的目标响应 HTTPS。