我正在尝试创建一个负载均衡器,在给定区域的3个不同的可用区之间平衡流量。如果我创建一个具有外部IP的“全局”负载均衡器,一切都会正常工作,但如果我只尝试创建一个使用特定子网的负载均衡器--健康检查总是失败,因为它们试图转到端口80,而不是我指定的端口。
请注意gcloud compute backend-services get-health xx-redacted-central-lb --region=us-central1
的以下输出
---
backend: https://www.googleapis.com/compute/v1/projects/yugabyte/zones/us-central1-a/instanceGroups/xx-redacted-central-a
status:
healthStatus:
- healthState: UNHEALTHY
instance: https://www.googleapis.com/compute/v1/projects/yugabyte/zones/us-central1-a/instances/yb-1-xx-redacted-lb-test-n2
ipAddress: 10.152.0.90
port: 80
kind: compute#backendServiceGroupHealth
---
backend: https://www.googleapis.com/compute/v1/projects/yugabyte/zones/us-central1-b/instanceGroups/ac-kroger-central-b
status:
healthStatus:
- healthState: UNHEALTHY
instance: https://www.googleapis.com/compute/v1/projects/yugabyte/zones/us-central1-b/instances/yb-1-xx-redacted-lb-test-n1
ipAddress: 10.152.0.92
port: 80
kind: compute#backendServiceGroupHealth
---
backend: https://www.googleapis.com/compute/v1/projects/yugabyte/zones/us-central1-c/instanceGroups/xx-redacted-central-c
status:
healthStatus:
- healthState: UNHEALTHY
instance: https://www.googleapis.com/compute/v1/projects/yugabyte/zones/us-central1-c/instances/yb-1-xx-redacted-lb-test-n3
ipAddress: 10.152.0.4
port: 80
kind: compute#backendServiceGroupHealth
此负载均衡器的运行状况检查是使用以下命令创建的:gcloud compute health-checks create tcp xx-redacted-central-hc4 --port=5433
后端是这样创建的:gcloud compute backend-services create xx-redacted-central-lb --protocol=TCP --health-checks=xx-redacted-central-hc4 --region=us-central1 --load-balancing-scheme=INTERNAL
后台完整描述:gcloud compute backend-services describe xx-redacted-central-lb --region=us-central1
backends:
- balancingMode: CONNECTION
group: https://www.googleapis.com/compute/v1/projects/yugabyte/zones/us-central1-a/instanceGroups/xx-redacted-central-a
- balancingMode: CONNECTION
group: https://www.googleapis.com/compute/v1/projects/yugabyte/zones/us-central1-b/instanceGroups/xx-redacted-central-b
- balancingMode: CONNECTION
group: https://www.googleapis.com/compute/v1/projects/yugabyte/zones/us-central1-c/instanceGroups/xx-redacted-central-c
connectionDraining:
drainingTimeoutSec: 0
creationTimestamp: '2020-04-01T19:16:44.405-07:00'
description: ''
fingerprint: aOB7iT47XCk=
healthChecks:
- https://www.googleapis.com/compute/v1/projects/yugabyte/global/healthChecks/xx-redacted-central-hc4
id: '1151478560954316259'
kind: compute#backendService
loadBalancingScheme: INTERNAL
name: xx-redacted-central-lb
protocol: TCP
region: https://www.googleapis.com/compute/v1/projects/yugabyte/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/yugabyte/regions/us-central1/backendServices/xx-redacted-central-lb
sessionAffinity: NONE
timeoutSec: 30
如果我尝试edit
后端并添加端口或端口名注释,它将无法保存,因为它认为这是内部负载均衡器的无效操作。
有什么想法吗?--艾伦
发布于 2020-04-04 08:46:51
根据GCP documentation1,为了运行健康检查,您必须创建一个入口,以允许来自Google Cloud probers的ip地址流量的防火墙规则可以连接到您的后端。
您可以查看此documentation2以了解SSL和TCP运行状况检查的成功标准。
1探测网段和防火墙规则https://cloud.google.com/load-balancing/docs/health-check-concepts#ip-ranges
2Success Criteria https://cloud.google.com/load-balancing/docs/health-check-concepts#criteria-protocol-ssl-tcp
发布于 2020-04-07 05:07:55
如果后端服务是实例组,则后端服务必须具有关联的Named Port。负载均衡服务使用命名端口将流量定向到单个实例上的特定端口。您可以assign port name mapping到实例组,通知负载均衡器使用该端口到达运行服务的后端。
发布于 2020-04-09 10:01:21
感谢您提供的信息。我可以成功地在我的终端重现这个问题,并发现奇怪的是,后端健康检查仍然指向端口80,而LB HC配置的端口不是80。产品工程团队已经意识到了这个问题,但是我没有任何关于修复和实现的ETA。您可以关注thread1以获取进一步的更新。
https://stackoverflow.com/questions/61013788
复制相似问题