Новая стандартная спецификация для управления внешним доступом к сервисам в Kubernetes.
🤚 Это не просто замена Ingress, а следующий этап развития, который предлагает более выразительный, расширяемый и ролевой подход к маршрутизации трафика.
🟢 Зачем это нужно?
— Разделение ответственности: Инфраструктурная команда управляет шлюзами (Gateways), а разработчики — правилами маршрутизации (HTTPRoute).
— Единый стандарт: Замена множества аннотаций Ingress-контроллеров на унифицированные CRD.
— Расширенные функции: Поддержка TLS, нагрузочного балансирования, канареечных развертываний, трассировки и многопротокольной маршрутизации (HTTP, gRPC, TCP/UDP) из коробки.
— Переносимость: Единая конфигурация работает с разными реализациями (Istio, Cilium, NGINX и др.).
🟢 Ключевые принципы
— GatewayClass: Определяет тип шлюза (как IngressClass). Создается администратором кластера.
— Gateway: Реализация шлюза в конкретном namespace. Определяет виртуальный IP, порты и привязку к GatewayClass.
— HTTPRoute (и другие *Route): Правила маршрутизации, привязанные к Gateway. Создаются разработчиками.
🟢 Практический пример: развертывание простого шлюза
✅ Создание GatewayClass (администратором):
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: public-lb
spec:
controllerName: "example.ru/gateway-controller"
description: "Шлюз для внешнего трафика"
✅ Создание Gateway:
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: web
namespace: infra
spec:
gatewayClassName: public-lb
listeners:
- name: http
protocol: HTTP
port: 80
allowedRoutes:
namespaces:
from: All
✅ Создание HTTPRoute (разработчиком в namespace app):
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: frontend-route
namespace: app
spec:
parentRefs:
- name: web
namespace: infra
hostnames: ["app.example.ru"]
rules:
- matches:
- path:
type: PathPrefix
value: /api
backendRefs:
- name: backend-service
port: 8080
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: frontend-service
port: 80
🟢 Что происходит после применения:
1. Контроллер Gateway API разворачивает шлюз (load balancer) с публичным IP
2. Трафик на
app.example.ru поступает на шлюз3. Путь
/api маршрутизируется к backend-service, остальной трафик — к frontend-service4. Политики namespaces предотвращают конфликты между командами
Gateway API — это не просто "Ingress 2.0", а фундаментально новая модель, которая превращает маршрутизацию трафика из админской задачи в декларативный и самообслуживаемый процесс.
#заметкиИнженера
