首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将HTTP负载均衡器链接到后端(502坏网关)

无法将HTTP负载均衡器链接到后端(502坏网关)
EN

Stack Overflow用户
提问于 2016-06-27 10:57:33
回答 3查看 2.8K关注 0票数 0

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

我现在试图实现的是创建一个HTTP负载均衡器,并将其链接到上面的后端。我使用以下脚本创建所需的基础设施:

代码语言:javascript
复制
#!/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访问的负载均衡器获得了以下响应:

错误:服务器错误 服务器遇到临时错误,无法完成请求。请在30秒后再试。

健康检查保留默认值:(/80),后端服务以状态200快速响应。

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

考虑到无论我选择哪个端口(在实例组中),并且得到相同的结果(Server Error),问题都应该出现在HTTP均衡器的配置中。(可能是做健康检查的?)

在完成前端和后端之间的连接时,我遗漏了什么?

EN

回答 3

Stack Overflow用户

发布于 2016-06-29 16:38:00

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

你在运行什么版本的kubernetes?Fyi在1.2中有一个资源可以自动为您连接:http://kubernetes.io/docs/user-guide/ingress/,只需确保您执行以下操作:LIMITATIONS.md

更具体地说:在1.2中,您需要创建防火墙规则、type=nodeport服务(这两项服务您似乎都已经拥有了),以及在"/“(您还没有,这种要求在1.3中得到了缓解,但1.3还没有)的服务的健康检查。

还要注意的是,您不能将相同的实例放入两个负载平衡的IGs中,因此要使用上面提到的宏,您必须清理现有的负载均衡器(或者至少,从IG中删除实例,并释放足够的配额,这样大会控制器就可以完成它的任务)。

票数 1
EN

Stack Overflow用户

发布于 2020-05-14 08:46:29

可能会有一些错误的地方被提到:

  • 防火墙规则需要设置为所有主机,是否需要与实例组中的计算机具有相同的网络标签?
  • 默认情况下,节点应该返回200at/-就绪和活动探测以进行配置,否则对我无效。

似乎你试图做的事情都是自动化的,所以我真的可以推荐:https://cloud.google.com/kubernetes-engine/docs/how-to/load-balance-ingress

这显示了为您执行防火墙和端口转发的步骤,这些步骤也可能显示您所缺少的内容。

当我在8080上使用一个应用程序时,我注意到自己暴露在80上(就像示例中的部署之一),负载均衡器不健康,直到我有/返回了200 (以及我添加到的/healthz )。因此,基本上,这个容器现在在端口8080上公开一个wires服务器,返回该服务器,以及连接到端口80的其他配置线。

当涉及到防火墙规则时,请确保将它们设置为所有计算机,或使网络标签匹配,否则将无法工作。502错误通常来自负载平衡器,如果健康检查没有通过,负载平衡器将不会通过您的请求。

票数 0
EN

Stack Overflow用户

发布于 2016-06-27 16:01:16

您能让您的服务类型LoadBalancer (http://kubernetes.io/docs/user-guide/services/#type-loadbalancer)自动设置吗?这假设您已经为google设置了标志。

部署之后,然后描述服务名称,并应该为您分配指定的端点。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38052185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档