首页 文章

无法将HTTP负载均衡器链接到后端(502 Bad Gateway)

提问于
浏览
0

我在后端有一个运行在端口32656上的Kubernetes节点(类型为NodePort的Kubernetes服务) . 如果我为 <node_ip>:32656 创建防火墙规则以允许流量,我可以在浏览器中打开此地址的后端: http://<node_ip>:32656 .

我现在尝试实现的是创建HTTP负载均衡器并将其链接到上面的后端 . 我使用以下脚本来创建所需的基础结构:

#!/bin/bash

GROUP_NAME="gke-service-cluster-61155cae-group"
HEALTH_CHECK_NAME="test-health-check"
BACKEND_SERVICE_NAME="test-backend-service"
URL_MAP_NAME="test-url-map"
TARGET_PROXY_NAME="test-target-proxy"
GLOBAL_FORWARDING_RULE_NAME="test-global-rule"
NODE_PORT="32656"
PORT_NAME="http"

# instance group named ports
gcloud compute instance-groups set-named-ports "$GROUP_NAME" --named-ports "$PORT_NAME:$NODE_PORT"

# health check
gcloud compute http-health-checks create --format none "$HEALTH_CHECK_NAME" --check-interval "5m" --healthy-threshold "1" --timeout "5m" --unhealthy-threshold "10"

# backend service
gcloud compute backend-services create "$BACKEND_SERVICE_NAME" --http-health-check "$HEALTH_CHECK_NAME" --port-name "$PORT_NAME" --timeout "30"
gcloud compute backend-services add-backend "$BACKEND_SERVICE_NAME" --instance-group "$GROUP_NAME" --balancing-mode "UTILIZATION" --capacity-scaler "1" --max-utilization "1"

# URL map
gcloud compute url-maps create "$URL_MAP_NAME" --default-service "$BACKEND_SERVICE_NAME"            

# target proxy
gcloud compute target-http-proxies create "$TARGET_PROXY_NAME" --url-map "$URL_MAP_NAME"

# global forwarding rule
gcloud compute forwarding-rules create "$GLOBAL_FORWARDING_RULE_NAME" --global --ip-protocol "TCP" --ports "80" --target-http-proxy "$TARGET_PROXY_NAME"

但是我从前端配置中通过公共IP访问的Load Balancer得到以下响应:

错误:服务器错误服务器遇到临时错误,无法完成您的请求 . 请在30秒后再试一次 .

运行状况检查保留默认值:( /80 ),后端服务以状态 200 快速响应 .

我还创建了防火墙规则来接受任何源和所有端口( tcp )并且没有指定目标(即所有目标) .

考虑到无论我选择哪个端口(在实例组中),并且我得到相同的结果( Server Error ),问题应该在HTTP负载均衡器的配置中 . (可能有 Health 检查的东西?)

在完成前端和后端之间的链接时我错过了什么?

2 回答

  • 1

    我假设您实际上在实例组中有实例,并且防火墙规则不是特定于源范围的 . 你能查看你的日志进行谷歌 Health 检查吗? (UA将谷歌在其中) .

    你在运行什么版本的kubernetes? Fyi 1.2中有一个资源可以自动为你解决这个问题:http://kubernetes.io/docs/user-guide/ingress/,只要确保你这样做:https://github.com/kubernetes/contrib/blob/master/ingress/controllers/gce/BETA_LIMITATIONS.md .

    更具体地说:在1.2中你需要创建一个防火墙规则,类型为= nodeport的服务(两者都是你已经拥有的),以及对该服务的 Health 检查“/”(你没有,这个要求)在1.3中缓解但1.3尚未出现) .

    另请注意,您不能将相同的实例放入2个loadbalanced IG中,因此要使用上面提到的Ingress,您必须清理现有的负载均衡器(或者至少从IG中删除实例,并释放足够的配额,以便入口控制器可以做它的事情) .

  • -1

    你能否自行设置你的服务类型 LoadBalancerhttp://kubernetes.io/docs/user-guide/services/#type-loadbalancer)?这假设您为Google Cloud 设置了标记 .

    部署之后,然后描述服务名称,并为您提供已分配的 endpoints .

相关问题