Я пробовал следовать следующему руководству: 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}
Обратите внимание, что строка backends заканчивается на «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>
Есть идеи, что может вызвать такую проблему?
Я понял две вещи:
Балансировщик нагрузки выполняет проверку работоспособности /
(что не задокументировано AFAIK), поэтому вы должны убедиться, что ваш бэкэнд возвращает 200 по этому пути.
Существует значительная задержка между созданием балансировщика нагрузки и его «активизацией» (около 10 минут). Когда это произойдет, строка: backends: {"k8s-be-00000--0000000000000000":"Unknown"}
станет либо: backends: {"k8s-be-00000--0000000000000000":"Healthy"}
или backends: {"k8s-be-00000--0000000000000000":"Unhealthy"}
. Эта задержка была причиной того, что учебник, связанный с вопросом, не работал (это действительно должно быть там задокументировано ...)
«Неизвестно» для бэкэнда означает, что ваш бэкэнд не исправен, что вызывает ошибку сервера 502. Вы настроили проверку работоспособности для прослушивания того же порта, что и служба, запущенная на сервере? Восстановление работоспособности серверной части должно решить вашу проблему. Более подробную информацию об отладке проверки работоспособности можно найти в этом Сообщение блога.