Google容器引擎上使用Ingress的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} 

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

此外,卷起外部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. 负载均衡器在/ (这是没有logging的AFAIK)进行健康检查,所以你必须确保你的后端在该path上返回200。

  2. 负载均衡器创build时和“激活”时间(大约10分钟左右)之间存在显着的延迟。 如果是这样,则backends: {"k8s-be-00000--0000000000000000":"Unknown"}将成为backends: {"k8s-be-00000--0000000000000000":"Healthy"}backends: {"k8s-be-00000--0000000000000000":"Unhealthy"} 。 这个延迟是在这个问题链接教程不起作用的原因(它真的应该logging在那里…)

后端“未知”意味着您的后端不健康,这是造成502服务器错误。 您是否configuration了运行状况检查以在与后端运行的服务相同的端口上进行侦听? 使后端回报健康应该解决您的问题。 有关debugging运行状况检查的更多信息,请参阅此博客文章 。