未检查GCP目标组实例

时间:2017-07-18 13:30:49

标签: google-cloud-platform load-balancing

我试图在GCP上创建TCP / UDP负载均衡器以允许我的服务上的HA,但是我注意到当我创建目标组时,该组中的所有实例都被标记为不健康并且没有被谷歌检查(我已经看过机器日志来检查它)。防火墙是开放的,因为是出于测试目的,所以我确定这不是问题。

我已经使用具有类似检查配置的后端创建了一个HTTP / S负载均衡器,同一台机器被标记为健康,所以这不是该机器的问题(即使现在日志显示谷歌是如何检查的那个例子。

两个检查都是HTTP到端口80,因此我无法查看问题的位置以及两种负载均衡器检查器之间的区别。

此外,我已检查过禁用运行状况检查,但实例仍标记为运行状况不佳,并且流量未发送到任何实例,因此负载均衡器无效。

是否需要任何其他配置来检查实例?

谢谢和问候!!

1 个答案:

答案 0 :(得分:1)

创建TCP负载均衡器

当您使用任何Google云负载均衡器时,无需将VM的外部端口暴露在互联网上,只有您的负载均衡器需要能够访问它。

steps to create a TCP load balancer are described here。我发现使用gcloud并运行命令很方便,但您也可以使用Cloud Console UI来获得相同的结果。

我尝试了以下步骤,它适用于我(您可以轻松修改它以使其与UDP一起使用 - 记住即使使用UDP负载平衡,您仍需要HTTP运行状况检查):

# Create 2 new instances
gcloud compute instances create vm1 --zone us-central1-f
gcloud compute instances create vm2 --zone us-central1-f

# Make sure you have some service running on port 80 on these VMs after creation.

# Create an address resource to act as the frontend VIP.
gcloud compute addresses create net-lb-ip-1 --region us-central1

# Create a HTTP health check (by default uses port 80).
$ gcloud compute http-health-checks create hc-1

# Create a target pool associated with the health check you just created.
gcloud compute target-pools create tp-1 --region us-central1 --http-health-check hc-1

# Add the instances to the target pool
gcloud compute target-pools add-instances tp-1 --instances vm1,vm2 --instances-zone us-central1-f

# Create a forwarding rule associated with the frontend VIP address we created earlier
# which will forward the traffic to the target pool.
$ gcloud compute forwarding-rules create fr-1 --region us-central1 --ports 80 --address net-lb-ip-1 --target-pool tp-1

# Describe the forwarding rule
gcloud compute forwarding-rules describe fr-1 --region us-central1

IPAddress: 1.2.3.4
IPProtocol: TCP
creationTimestamp: '2017-07-19T10:11:12.345-07:00'
description: ''
id: '1234567890'
kind: compute#forwardingRule
loadBalancingScheme: EXTERNAL
name: fr-1
portRange: 80-80
region: https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/regions/us-central1/forwardingRules/fr-1
target: https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/regions/us-central1/targetPools/tp-1

# Check the health status of the target pool and verify that the
# target pool considers the backend instances to be healthy
$ gcloud compute target-pools get-health tp-1
---
healthStatus:
- healthState: HEALTHY
  instance: https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/us-central1-f/instances/vm1
  ipAddress: 1.2.3.4
kind: compute#targetPoolInstanceHealth
---
healthStatus:
- healthState: HEALTHY
  instance: https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/us-central1-f/instances/vm2
  ipAddress: 1.2.3.4
kind: compute#targetPoolInstanceHealth

非代理TCP / UDP负载均衡器需要HTTP运行状况检查

如果您使用的是UDP负载均衡器(在Google CLoud中被视为网络负载均衡),您需要启动一个基本的HTTP服务器,除了正在侦听的服务之外,它还可以响应HTTP运行状况检查用于传入流量的UDP端口。

同样适用于基于非代理的TCP负载均衡器(在Google Cloud中也被视为网络负载均衡)。

这是documented here

  

Health checking

     

运行状况检查确保Compute Engine仅转发新连接   到达并准备接收它们的实例。计算引擎   将健康检查请求发送到指定的每个实例   频率;一旦实例超过其允许的健康检查次数   失败,它不再被视为合格的实例   接收新的流量。现有连接不会主动   终止,允许实例正常关闭和关闭   TCP连接。

     

运行状况检查继续查询运行状况不佳的实例,然后返回   一旦指定的成功检查次数,池中的实例   满足了。

     

网络负载平衡依赖于legacy HTTP Health checks   确定实例健康。即使您的服务不使用HTTP,   你需要至少在每个实例上运行一个基本的Web服务器   健康检查系统可以查询。