Гайды
API Gateway и service discovery: Consul, etcd
Роль шлюза, Consul catalog и Connect, etcd и Kubernetes; Ingress и лимиты на upstream.
~10 мин чтения
API Gateway и service discovery: Consul, etcd
API Gateway — единая точка входа: TLS, auth, rate limit, routing, composition запросов к микросервисам. Service discovery — как клиент находит живые инстансы (Consul, etcd, встроенный DNS k8s). K8s — Pods, Deployments и Services; REST-дизайн — REST: HATEOAS и версионирование.
1. Функции API Gateway
- Аутентификация (JWT, mTLS, API keys).
- WAF интеграция.
- Request/response transform.
- Observability (correlation id).
Продукты: Kong, Tyk, AWS API Gateway, Envoy + contour/emissary.
Лимиты: помимо RPS по клиенту, задавайте burst и quota по API key / JWT sub; для GraphQL — отдельный query cost (см. GraphQL vs REST). На уровне mesh (Istio) — LocalRateLimit и глобальные квоты через внешний сервис.
2. Consul
Catalog сервисов, health checks, DNS service.consul, KV store. Connect — service mesh с mTLS.
3. etcd
Распределённое консенсусное KV (Raft); backend для Kubernetes сам по себе. Для service discovery приложений чаще используют обёртки или Kubernetes Service + Endpoints.
4. В Kubernetes
Часто Ingress + CoreDNS достаточно; mesh (Istio/Linkerd) добавляет traffic management.
5. Маршрутизация и политики
Path/host based routing, веса для canary, JWT validation на шлюзе vs в каждом сервисе (компромисс безопасность/централизация). mTLS между gateway и upstream в zero-trust сетях. Request size limits защищают от OOM на бэкенде.
6. Consul: операции
Gossip и Raft для серверов; клиентский agent на ноде для регистрации сервиса и локальных health checks. Prepared queries для failover между датацентрами. Храните ACL tokens в Vault, не в репозитории.
7. Чек-лист
- Не превращать gateway в «божественный объект» со всей бизнес-логикой.
- Кэширование ответов только где безопасно.
- Лимиты и таймауты на upstream — Circuit breaker и retry.
- Идемпотентность при ретраях на шлюзе (ключи, dedup).
- Единый correlation id с заголовка входа до исходящих вызовов.
Дальше: Ingress в Kubernetes