Вопросы и ответы про Application Load Balancer
- Как записывать IP-адреса клиентов в логи веб-сервера?
- Почему при переключении между доменами возникает ошибка
no_route? - Почему после применения конфигурации Ingress не появляется маршрут?
Как записывать IP-адреса клиентов в логи веб-сервера?
Application Load Balancer передает IP-адрес источника HTTP-запроса в заголовке X-Forwarded-For. Чтобы сохранять его в логах веб-сервера на бэкенде, нужно добавить этот заголовок в формат записи логов.
В секции http задается формат с переменной $http_x_forwarded_for, а в директиве access_log — имя этого формата:
log_format alb '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log alb;
Если в секциях server или location уже задана директива access_log, для нее также нужен формат alb.
В директиве LogFormat заголовок обозначается как %{X-Forwarded-For}i. Этот формат используется в CustomLog:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{X-Forwarded-For}i\"" alb
CustomLog "logs/access_log" alb
Пути к файлам логов зависят от конфигурации веб-сервера. После применения конфигурации и перезагрузки веб-сервера заголовок будет записываться в логи запросов. Если запрос проходит через промежуточные прокси, заголовок может содержать несколько IP-адресов.
В Yandex Network Load Balancer исходный IP-адрес сохраняется по умолчанию. Для сервиса Kubernetes типа LoadBalancer сохранение адреса на бэкенде настраивается параметром externalTrafficPolicy: Local. Подробнее в инструкции по созданию сетевого балансировщика.
Почему при переключении между доменами возникает ошибка no_route?
Ошибка no_route означает, что запрос не соответствует ни одному маршруту в HTTP-роутерах балансировщика.
Если домены разрешаются в один IP-адрес и покрываются одним TLS-сертификатом, браузер может переиспользовать соединение при переходе к другому домену. Обработчик SNI при этом не выбирается заново, и запрос может попасть в другой HTTP-роутер. Варианты настройки сертификатов и виртуальных хостов описаны в разделе Обработчик.
Почему после применения конфигурации Ingress не появляется маршрут?
Причину можно определить по логам Ingress-контроллера Application Load Balancer. Проверка создания балансировщика и выбор пода контроллера описаны в инструкции по применению конфигурации.
Превышение квоты на статические публичные IP-адреса может помешать созданию балансировщика с публичным адресом. Это одна из возможных причин: ошибки также могут быть связаны с конфигурацией ресурсов. Увеличение квоты требуется только в том случае, если ее превышение подтверждено в логах.