使用 Ingress 在 Google Container Engine 上实现 HTTP 负载均衡器

使用 Ingress 在 Google Container Engine 上实现 HTTP 负载均衡器

我已尝试按照以下教程操作:https://cloud.google.com/container-engine/docs/tutorials/http-balancer

一切似乎都顺利,直到最后

kubectl describe ingress basic-ingress

返回

 Name:          basic-ingress
Namespace:      default
Address:        {hidden_external_ip}
Default backend:    nginx:80 ({hidden_internal_ip}:80)
Rules:
  Host  Path    Backends
  ----  ----    --------
  * *   nginx:80 ({hidden_internal_ip}:80)
Annotations:
  backends:     {"k8s-be-00000--0000000000000000":"Unknown"}
  forwarding-rule:  k8s-fw-default-basic-ingress--0000000000000000
  target-proxy:     k8s-tp-default-basic-ingress--0000000000000000
  url-map:      k8s-um-default-basic-ingress--0000000000000000
Events:
  FirstSeen LastSeen    Count   From                SubobjectPath   Type        Reason  Message
  --------- --------    -----   ----                -------------   --    ------    ------  -------
  1m        1m      1   {loadbalancer-controller }          Normal          ADD default/basic-ingress
  23s       23s     1   {loadbalancer-controller }          Normal          CREATE  ip: {hidden_external_ip}

请注意,后端行以“unknown”结尾

此外,卷曲外部 IP 返回以下内容:

<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<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>

知道什么可能导致这个问题吗?

答案1

我想出了两件事:

  1. 负载均衡器会进行健康检查/(据我所知没有记录),因此您必须确保后端在该路径上返回 200。

  2. 在创建负载均衡器和“激活”负载均衡器之间存在显著的延迟(约 10 分钟左右)。当它激活时,行:backends: {"k8s-be-00000--0000000000000000":"Unknown"}将变为:backends: {"k8s-be-00000--0000000000000000":"Healthy"}backends: {"k8s-be-00000--0000000000000000":"Unhealthy"}。此延迟是问题中链接的教程不起作用的原因(确实应该在那里记录...)

答案2

后端的“未知”表示您的后端不健康,这导致了 502 服务器错误。您是否将健康检查配置为监听与后端上运行的服务相同的端口?使后端返回健康应该可以解决您的问题。有关调试健康检查的更多信息,请参阅博客文章

相关内容