Google 容器引擎中的 HTTPS 负载平衡器
HTTPS load balancer in Google Container Engine
我正在尝试使用 HTTPS L7 load balancer but for some reason is not working. Even the HTTP load balancer in the HTTP Load Balancing walkthrough 为 GKE 设置 HTTPS 负载平衡器。转发规则的 IP 地址已创建,我可以 ping 和 telnet 到端口 80。但是当通过 curl 请求时,它给我一个错误。
<title>502 Server Error</title> </head> <body text=#000000
bgcolor=#ffffff> <h1>Error: Server Error</h1> <h2>The server
encountered a temporary error and could not complete your request.
<p>Please try again in 30 seconds.</h2> <h2></h2> </body></html>
所有步骤都很好,我创建了一个没有任何 ${NODE_PORT} 标签的防火墙,但它没有用。
有人遇到过这个问题吗?
我刚刚浏览了示例并且(在为 $NODE_PORT 打开防火墙之前)看到了相同的 502 错误。
如果您在
查看云控制台
https://console.developers.google.com/project/<project>/loadbalancing/http/backendServices/details/web-map-backend-service
您应该看到后端显示 ${num_nodes_in_cluster} 中有 0 个是健康的。
对于您的防火墙定义,请确保将源过滤器设置为 130.211.0.0/22
至 allow traffic from the the load balancing service,并将允许的协议和端口设置为 tcp:$NODE_PORT
。
我的应用程序遇到了同样的问题,问题是我们没有端点返回 "Success" 并且运行状况检查总是失败。
如果健康检查没有通过,HTTP/HTTPS 负载均衡器似乎不会将请求发送到集群节点,所以我的解决方案是创建一个始终 returns 200 OK 的端点,一旦健康检查通过,LB 就开始工作了。
我使用的是 GKE,我只是走遍了 example 并且它工作正常,但是当我路由到我自己的服务时,它不起作用。 (我的服务是休息api服务)
我发现我的服务与示例最大的区别在于:示例有一个根端点(“/”),但我不支持它。
所以,我以这种方式解决了这个问题:向我的服务添加一个根端点(“/”),然后 return 成功(一个 return 什么都没有的空端点),然后重新创建ingress,等待几分钟,然后ingress就可以了!!
我觉得这个问题应该是healthy checker引起的UNHEALTHY instances do not receive new connections
.
这里是 link 健康检查:https://cloud.google.com/compute/docs/load-balancing/health-checks
就我而言,问题在几分钟后(比如 5-10 分钟)得到解决。
如果使用入口,在与入口相关的事件中可能会有其他信息。要查看这些:
kubectl describe ingress example
就我而言,负载均衡器返回此错误是因为我的实例和实例组上没有网络服务器 运行 来处理网络请求。
我在所有机器上都安装了 nginx,然后它开始工作了。
从现在开始,我在创建 vm/instance.
时特别注意在我的启动脚本中添加 nginx
如果您在负载均衡器后面使用 nginx,那么 default_server 返回 200 或其他一些 2** 很重要。这意味着如果你有一个 returns 301 的重写规则,那么它将失败。
解决方案是在您的主服务器上设置default_server:
server {
# Rewrite calls to www
listen 443;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 default_server;
server_name www.example.com;
...
我创建了一个
用户代理中包含 'GoogleHC' 的所有请求的端点。
所以,
server{
server_name example.com www.example.com
if ($http_user_agent ~* 'GoogleHC.*') {
return 200 'isaac newton';
}
}
为 Source: 130.211.0.0/22
(GCP 上的负载均衡器范围)添加防火墙规则 tcp:$NODEPORTIP
为我解决了这个问题。
我正在尝试使用 HTTPS L7 load balancer but for some reason is not working. Even the HTTP load balancer in the HTTP Load Balancing walkthrough 为 GKE 设置 HTTPS 负载平衡器。转发规则的 IP 地址已创建,我可以 ping 和 telnet 到端口 80。但是当通过 curl 请求时,它给我一个错误。
<title>502 Server Error</title> </head> <body text=#000000
bgcolor=#ffffff> <h1>Error: Server Error</h1> <h2>The server
encountered a temporary error and could not complete your request.
<p>Please try again in 30 seconds.</h2> <h2></h2> </body></html>
所有步骤都很好,我创建了一个没有任何 ${NODE_PORT} 标签的防火墙,但它没有用。
有人遇到过这个问题吗?
我刚刚浏览了示例并且(在为 $NODE_PORT 打开防火墙之前)看到了相同的 502 错误。
如果您在
查看云控制台https://console.developers.google.com/project/<project>/loadbalancing/http/backendServices/details/web-map-backend-service
您应该看到后端显示 ${num_nodes_in_cluster} 中有 0 个是健康的。
对于您的防火墙定义,请确保将源过滤器设置为 130.211.0.0/22
至 allow traffic from the the load balancing service,并将允许的协议和端口设置为 tcp:$NODE_PORT
。
我的应用程序遇到了同样的问题,问题是我们没有端点返回 "Success" 并且运行状况检查总是失败。
如果健康检查没有通过,HTTP/HTTPS 负载均衡器似乎不会将请求发送到集群节点,所以我的解决方案是创建一个始终 returns 200 OK 的端点,一旦健康检查通过,LB 就开始工作了。
我使用的是 GKE,我只是走遍了 example 并且它工作正常,但是当我路由到我自己的服务时,它不起作用。 (我的服务是休息api服务)
我发现我的服务与示例最大的区别在于:示例有一个根端点(“/”),但我不支持它。
所以,我以这种方式解决了这个问题:向我的服务添加一个根端点(“/”),然后 return 成功(一个 return 什么都没有的空端点),然后重新创建ingress,等待几分钟,然后ingress就可以了!!
我觉得这个问题应该是healthy checker引起的UNHEALTHY instances do not receive new connections
.
这里是 link 健康检查:https://cloud.google.com/compute/docs/load-balancing/health-checks
就我而言,问题在几分钟后(比如 5-10 分钟)得到解决。
如果使用入口,在与入口相关的事件中可能会有其他信息。要查看这些:
kubectl describe ingress example
就我而言,负载均衡器返回此错误是因为我的实例和实例组上没有网络服务器 运行 来处理网络请求。
我在所有机器上都安装了 nginx,然后它开始工作了。
从现在开始,我在创建 vm/instance.
时特别注意在我的启动脚本中添加 nginx如果您在负载均衡器后面使用 nginx,那么 default_server 返回 200 或其他一些 2** 很重要。这意味着如果你有一个 returns 301 的重写规则,那么它将失败。
解决方案是在您的主服务器上设置default_server:
server {
# Rewrite calls to www
listen 443;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 default_server;
server_name www.example.com;
...
我创建了一个 用户代理中包含 'GoogleHC' 的所有请求的端点。
所以,
server{
server_name example.com www.example.com
if ($http_user_agent ~* 'GoogleHC.*') {
return 200 'isaac newton';
}
}
为 Source: 130.211.0.0/22
(GCP 上的负载均衡器范围)添加防火墙规则 tcp:$NODEPORTIP
为我解决了这个问题。