У меня есть сервер HAProxy, который я использую в качестве балансировщика нагрузки L7 для своих узлов k8s. В моем кластере включен istio, и у меня есть служба istio-ingressgateway, доступная через NodePort.
НАЗВАНИЕ ТИП КЛАСТЕР-IP ВНЕШНИЙ-IP ПОРТ(Ы) ВОЗРАСТ
istio-ingressgateway NodePort 10.11.140.167 <нет> 15021:30301/TCP,80:31916/TCP,443:31517/TCP,15012:30768/TCP,15443:32020/TCP 11d
С сервера HAProxy я пытаюсь выполнить проверку работоспособности /здоровье/готово
конечная точка. Я использую HAProxy 1.8 и мой haproxy.cfg
составляет:
Глобальный
журнал /dev/лог локальный0
журнал /dev/log local1 уведомление
chroot /var/lib/haproxy
pid-файл /var/run/rh-haproxy18-haproxy.pid
пользовательский прокси
группа haproxy
демон
stats socket /run/haproxy/admin.sock mode 660 уровень администратора expose-fd listeners
спред-чеки 21
# Расположение материалов SSL по умолчанию
ca-база /etc/ssl/сертификаты
crt-база /etc/ssl/частный
# Шифры по умолчанию для использования в прослушивающих сокетах с поддержкой SSL.
# Для получения дополнительной информации см. ciphers(1SSL). Этот список взят из:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
# Альтернативный список с дополнительными директивами можно получить из
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
ssl-default-bind-параметры без sslv3
значения по умолчанию
режим http
журнал глобальный
опция httplog
опция
опция http-server-close
опция повторной отправки
повторяет 3
таймаут http-запроса 10s
очередь ожидания 1м
тайм-аут соединения 10 сек.
таймаут клиента 1м
таймаут сервера 1м
тайм-аут http-keep-alive 10s
проверка тайм-аута 10s
максконн 10000
круговой баланс
интерфейс http-80
привязать *:80
режим http
опция httplog
default_backend www-80
бэкэнд www-80
круговой баланс
режим http
опция httpchk /healthz/ready HTTP/1.1
http-check ожидает статус 200
server backendnode1 155.13.200.29:31916 проверить порт 30301 падение 3 подъем 2 между 1597
server backendnode2 155.13.200.28:31916 проверить порт 30301 падение 3 подъем 2 между 1597
server backendnode3 155.13.200.27:31916 проверить порт 30301 падение 3 подъем 2 между 1597
фронтенд здоровье-80
привязать *:8080
acl backend_dead nbsrv(www-80) lt 1
монитор-ури /haproxy_status
сбой монитора, если backend_dead
listen stats # Определите раздел прослушивания под названием «stats»
bind :9000 # Прослушивание на локальном хосте:9000
режим http
stats enable # Включить страницу статистики
stats hide-version # Скрыть версию HAProxy
stats realm Haproxy\ Statistics # Текст заголовка всплывающего окна
stats uri /haproxy_stats # URI статистики
статистика аутентификации haproxy:passwd
Я использую HTTP/1.1
для проверки работоспособности серверной части, потому что istio-входшлюз
не принимает HTTP/1.0
запросы, это приводит к коду ошибки 426
.
Обращение к бэкенду с сервера HAProxy приводит к успеху:
завиток -I http://155.13.200.29:31916/healthz/ready
HTTP/1.1 200 ОК
дата: пт, 11 июня 2021 г., 07:21:09 по Гринвичу
x-envoy-upstream-service-time: 0
сервер: посланник
кодирование передачи: по частям
Однако проверка работоспособности HAProxy по-прежнему не проходит. Я получаю следующие ошибки:
11 июня, 07:18:22 hap-server01 haproxy[12348]: сервер www-80/backendnode2 ВЫКЛЮЧЕН, причина: неверный статус уровня 7, код: 400, информация: «Проверка состояния HTTP вернула код <3C>400<3E>» , продолжительность проверки: 2 мс. Остался 1 активный и 0 резервных серверов. 0 активных сессий, 0 в очереди, 0 в очереди.
11 июня, 07:18:22 hap-server01 haproxy[12348]: сервер www-80/backendnode2 ВЫКЛЮЧЕН, причина: неверный статус уровня 7, код: 400, информация: «Проверка состояния HTTP вернула код <3C>400<3E>» , продолжительность проверки: 2 мс. Остался 1 активный и 0 резервных серверов. 0 активных сессий, 0 в очереди, 0 в очереди.
11 июня 07:18:22 hap-server01 haproxy[11795]: [ПРЕДУПРЕЖДЕНИЕ] 161/071821 (11795): Бывший рабочий 11798 вышел с кодом 0
11 июня, 07:18:22 hap-server01 haproxy[12348]: сервер www-80/backendnode3 ВЫКЛЮЧЕН, причина: неверный статус Layer7, код: 400, информация: «Проверка состояния HTTP вернула код <3C>400<3E>» , продолжительность проверки: 3 мс. Осталось 0 активных и 0 резервных серверов. 0 активных сессий, 0 в очереди, 0 в очереди.
11 июня, 07:18:22 hap-server01 haproxy[12348]: сервер www-80/backendnode3 ВЫКЛЮЧЕН, причина: неверный статус Layer7, код: 400, информация: «Проверка состояния HTTP вернула код <3C>400<3E>» , продолжительность проверки: 3 мс. Осталось 0 активных и 0 резервных серверов. 0 активных сессий, 0 в очереди, 0 в очереди.
Я понимаю, что код состояния 400
происходит для плохих запросов. Что-то не так настроено в моем haproxy.cfg
? Я чувствую, что это то, как я пытаюсь отправить HTTP/1.1
запрос на проверку здоровья. Но я не уверен, что еще добавить или что изменить в конфигурации.