Секрет №1: Идеальная структура манифестов. Не храните все конфигурации в одном огромном YAML-файле. Мастера используют модульный подход, разделяя конфигурацию по типам ресурсов и доменам. Используйте отдельные файлы или даже Helm-чарты для `Mappings`, `Modules`, `TCPMappings`, `TLSContexts`. Это упрощает управление версиями, ревью кода и развертывание через GitOps. Например, создайте структуру: `ambassador-config/` -> `mappings/` (разбитые по сервисам), `tls/`, `auth/`, `modules.yaml`. Применяйте их с помощью `kubectl apply -f ambassador-config/`.
Секрет №2: Глубокое понимание Mapping-ресурсов. `Mapping` — сердце Ambassador. Ключевые параметры для продакшена:
- `prefix`, `regex`, `exact`: для сложных путей используйте `regex`, но помните о производительности. Всегда старайтесь использовать `prefix` для простоты.
- `timeout_ms` и `idle_timeout_ms`: обязательно устанавливайте явные таймауты для ваших сервисов, чтобы предотвратить «висящие» соединения. Таймаут по умолчанию может не подходить для долгих операций (загрузка файлов, отчеты).
- `circuit_breakers`: настройка паттерна «Circuit Breaker» критична для устойчивости. Ограничивайте максимальное количество запросов (`max_requests`) и соединений (`max_connections`) на upstream-сервис, чтобы один проблемный сервис не потопил весь шлюз.
- `load_balancer`: понимание политик балансировки (`round_robin`, `least_request`, `ring_hash` для sticky-сессий) необходимо для оптимального распределения трафика.
- **SNI (Server Name Indication)**: для хостинга нескольких доменов с разными сертификатами на одном IP-адресе.
- **Взаимный TLS (mTLS)**: настройте `TLSContext` с `secret` для клиентского сертификата, чтобы обеспечить аутентификацию между шлюзом и upstream-сервисами в mesh-сети.
- **Строгие шифры и протоколы**: в продакшене явно отключайте устаревшие протоколы (TLS 1.0, 1.1) и слабые шифры в конфигурации модуля.
- **Автоматизация сертификатов**: интегрируйте с cert-manager для автоматического получения и обновления Let's Encrypt сертификатов. Это must-have для любого production-окружения.
Секрет №5: Авторизация и аутентификация (AuthService). Делегируйте проверку запросов внешнему сервису. Секрет мастера — в создании эффективного `AuthService`. Он должен быть быстрым (кешировать решения, если возможно), устойчивым (иметь короткие таймауты и fallback-политики на случай недоступности) и информативным (возвращать нужные заголовки для upstream-сервисов). В конфигурации `AuthService` используйте `proto: grpc` для лучшей производительности вместо `http`, если ваш сервис это поддерживает. Всегда настраивайте `timeout` и `allow_request_on_error` для определения поведения при сбое сервиса авторизации.
Секрет №6: Rate Limiting (RateLimitService). Защита от DDoS и злоупотреблений. Ambassador может интегрироваться с внешним сервисом ограничения запросов (совместимым с Lyft's RLS). Мастера настраивают многоуровневое ограничение: по IP-адресу, по API-ключу, по endpoint. Важно правильно описывать `descriptors` в конфигурации. Например, можно ограничить общее количество запросов ко всему шлюзу для одного клиента и отдельно — количество запросов к конкретному критичному эндпоинту.
Секрет №7: Канареечные развертывания и управление трафиком. Используйте `weight` в `Mapping` для реализации canary-релизов. Создайте два `Mapping` на один и тот же `prefix`, но с разными `service` и `weight` (например, 90% трафика на старую версию, 10% — на новую). Более продвинутый способ — использование `headers` или `regex_headers` для маршрутизации на основе заголовков (например, `X-Canary: test`), что позволяет направлять трафик внутренних тестеров на новую версию.
Секрет №8: Оптимизация производительности. Включите gzip-сжатие ответов через конфигурацию модуля (`compressor`). Настройте корректные `retry_policy` (количество попыток, условия повторения), чтобы не создавать излишнюю нагрузку при временных сбоях. Используйте `keepalive` настройки для upstream-соединений, чтобы избежать накладных расходов на постоянное установление TCP-соединений.
Изучение и применение этих восьми секретов позволит вам перевести ваш Ambassador API Gateway из состояния «работает» в состояние «работает оптимально, безопасно и наблюдаемо». Главный принцип — мыслить декларативно, использовать возможности Envoy через простые CRD Ambassador и всегда тестировать конфигурации в staging-окружении перед продакшеном.
Комментарии (9)