404 errors occur when multiple gateways configured with same TLS certificate
Содержание
Problem Description
Symptom
При обращении к сервисам через Istio Ingress Gateway с использованием протокола HTTP/2 возникают ошибки 404. Это известная проблема в сообществе Istio.
Root Cause
Конфигурация нескольких шлюзов с одним и тем же TLS-сертификатом приводит к тому, что HTTP/2 браузеры генерируют ошибки 404 при обращении к вторичным хостам после установления первоначального соединения. Это происходит из-за повторного использования HTTP/2 соединения в браузерах.
Example Scenario:
- Домены
a.example.comиb.example.comиспользуют один и тот же TLS-сертификат - Настроены в отдельных ресурсах Gateway
- Браузер обращается сначала к
a.example.com, затем кb.example.comпо тому же соединению
Troubleshooting
Verification Script
Выполните этот скрипт на мастере кластера, где развернут Istio Ingress Gateway:
Expected Output:
Solution for Root Cause 1: Merge Gateway Resources
Considerations
- Это рекомендованное сообществом решение
- Сохраняет преимущества производительности HTTP/2
- Требует изменения существующих конфигураций Gateway
Prerequisites
- Установлен
jqверсии 1.7 и выше на узлах кластера - Доступ к кластеру с правами kubectl
Steps
- Определите конфликтующие Gateway с помощью скрипта проверки
- Объедините конфигурации Host:
- Обновите VirtualServices для ссылки на объединённый Gateway
- Удалите избыточные Gateway
- Проверьте конфигурацию:
Solution for Root Cause 2: 421 Response Code
Considerations
- Требуется поддержка клиентом кода состояния 421
- Совместимо с Chrome/Firefox/Safari версии 15.1 и выше
Prerequisites
- Версия Istio ≥ 1.12
- Привилегии администратора кластера
Steps
- Примените EnvoyFilter:
- Проверьте реализацию:
Preventive Measures
- Управление сертификатами:
- Используйте wildcard-сертификаты (*.example.com)
- Избегайте повторного использования сертификатов в разных окружениях
- Проектирование Gateway:
- Реализуйте один gateway на шаблон домена
- Используйте изоляцию сертификатов по namespace
- Регулярные аудиты:
Related Content
HTTP/2 Connection Reuse Mechanism:
- Одно TLS-соединение обрабатывает несколько запросов
- Сервер использует SNI для маршрутизации запросов
- Несовпадение заголовков SNI вызывает сбои маршрутизации
Istio Documentation Reference: Istio Common Problems - 404 Errors