Назад | Перейти на главную страницу

Балансировщик нагрузки HTTP в Google Container Engine с использованием Ingress

Я пробовал следовать следующему руководству: 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>

Есть идеи, что может вызвать такую ​​проблему?

Я понял две вещи:

  1. Балансировщик нагрузки выполняет проверку работоспособности / (что не задокументировано AFAIK), поэтому вы должны убедиться, что ваш бэкэнд возвращает 200 по этому пути.

  2. Существует значительная задержка между созданием балансировщика нагрузки и его «активизацией» (около 10 минут). Когда это произойдет, строка: backends: {"k8s-be-00000--0000000000000000":"Unknown"} станет либо: backends: {"k8s-be-00000--0000000000000000":"Healthy"} или backends: {"k8s-be-00000--0000000000000000":"Unhealthy"}. Эта задержка была причиной того, что учебник, связанный с вопросом, не работал (это действительно должно быть там задокументировано ...)

«Неизвестно» для бэкэнда означает, что ваш бэкэнд не исправен, что вызывает ошибку сервера 502. Вы настроили проверку работоспособности для прослушивания того же порта, что и служба, запущенная на сервере? Восстановление работоспособности серверной части должно решить вашу проблему. Более подробную информацию об отладке проверки работоспособности можно найти в этом Сообщение блога.