Блок 1: Базовая конфигурация и ресурсы. Убедитесь, что вы используете правильные Custom Resource Definitions (CRDs). Основные — это `Listener` (для приема трафика на портах), `Host` (для привязки доменов и TLS) и `Mapping` (маршрутизация запросов к сервисам). "Секрет" в том, чтобы структурировать эти ресурсы логически: использовать пространства имен (namespaces) для изоляции сред (dev/stage/prod) и применять labels и annotations для удобства управления. Всегда явно задавайте `ambassador_id` в Mapping, чтобы избежать случайной маршрутизации в неправильном развертывании шлюза.
Блок 2: Безопасность и аутентификация. Это приоритет номер один. Чек-лист безопасности:
- TLS Termination: Настройте `Host` ресурсы с указанием TLS-сертификатов, полученных от Let's Encrypt (через механизм ACME) или из вашего центра сертификации. Включите современные протоколы (TLS 1.2/1.3) и отключите устаревшие шифры.
- Authentication: Используйте `FilterPolicy` и `Filter` ресурсы для подключения внешних сервисов аутентификации, таких как Auth0, Keycloak или кастомный OAuth2/JWT endpoint. Настройте проверку JWT-токенов (проверка подписи, аудитории, времени жизни) прямо на уровне шлюза, чтобы не нагружать бэкенд-сервисы.
- Rate Limiting: Настройте глобальное или granular rate limiting с помощью `RateLimitService`. Это защита от DDoS и ошибочных сценариев. Конфигурируйте лимиты отдельно для аутентифицированных и анонимных пользователей.
- IP Allow/Deny Lists: Используйте `IPAllowList` фильтры для ограничения доступа к административным или внутренним эндпоинтам только с доверенных CIDR-блоков (например, офисной сети или VPN).
- Timeouts and Retries: В каждом `Mapping` явно задавайте `timeout_ms`, `idle_timeout_ms` и политику повторов (`retry_policy`). Без этого зависший бэкенд может истощить соединения в шлюзе. Используйте экспоненциальную задержку при повторах и ограничивайте их число.
- Circuit Breaking: Настройте обрыв цепи (circuit breaking) через аннотации в `Mapping` (`circuit_breakers`). Это предотвратит лавинообразный сбой, если бэкенд начинает отвечать ошибками.
- Health Checks: Ambassador использует health checks от Envoy. Убедитесь, что readiness и liveness пробы ваших бэкенд-сервисов настроены корректно, чтобы нездоровые поды выводились из балансировки.
- Распределение трафика (Canary, Blue-Green): Используйте веса (`weight`) в `Mapping` для реализации canary-развертываний. Например, 95% трафика на старую версию, 5% — на новую. Для blue-green можно использовать разные `Host` или заголовки (headers).
- Метрики: Ambassador по умолчанию экспортирует метрики в формате Prometheus. Убедитесь, что они собраны и визуализированы в Grafana. Ключевые метрики: количество запросов по кодам ответов (5xx, 4xx), задержки (p50, p95, p99), активные соединения, срабатывания rate limit.
- Логи доступа (Access Logs): Включите и настройте формат access-логов. Направьте их в централизованную систему, такую как ELK Stack или Loki. Это критично для аудита и отладки инцидентов.
- Трассировка (Distributed Tracing): Интегрируйте Ambassador с Jaeger, Zipkin или OpenTelemetry. Настройте автоматическую передачу заголовков трассировки (например, `x-request-id`, `traceparent`) в бэкенд-сервисы. Это позволит отслеживать путь запроса через всю систему.
- Кэширование ответов: Используйте ресурс `TCPMapping` для TCP-трафика (например, для баз данных) и `Mapping` с настройкой кэширования (`caching` в `value`) для кэшируемых HTTP-ответов (справочники, статика). Это снизит нагрузку на бэкенды.
- Сжатие (Gzip/Brotli): Включите сжатие ответов для текстовых форматов (JSON, HTML) на уровне шлюза.
- Оптимизация ресурсов Pod: Установите лимиты и запросы CPU/memory для подов Ambassador, основанные на метриках потребления в пиковой нагрузке. Недостаток ресурсов приведет к сбросу соединений.
Заключительный совет от практиков: Ambassador — мощный инструмент, но его не следует рассматривать как "set and forget". Регулярно пересматривайте конфигурацию, обновляйте до новых версий для получения исправлений уязвимостей и проводите периодические учения по отработке сбоев (chaos engineering) в контролируемой среде, чтобы убедиться в устойчивости вашей настройки.
Комментарии (5)