3.6.2 · блок 3
Gateway API и Ingress на практике
Gateway API и Ingress на практике
Зачем это нужно
Вы деплоите inference-сервис — нужен URL https://scorer-dev.ml.mdp.ru. Платформа уже подняла Gateway; ваша задача — описать маршрут к Service. На MDP это часто Gateway API (HTTPRoute) или Istio-обёртки. Классический Ingress всё ещё встречается в legacy chart'ах — уметь читать оба формата обязательно.
Основные идеи
Ingress (минимальный пример).
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: scorer
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: nginx
tls:
- hosts:
- scorer-dev.ml.mdp.ru
secretName: scorer-tls
rules:
- host: scorer-dev.ml.mdp.ru
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: scorer
port:
number: 8080
Gateway API — три слоя.
1. GatewayClass — «какой контроллер» (istio, nginx). Ставит platform team.
2. Gateway — listener'ы (порт 443, hostname, TLS cert).
3. HTTPRoute — правила маршрутизации в namespace приложения.
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: scorer
namespace: ml-dev
spec:
parentRefs:
- name: shared-gateway
namespace: ingress-system
hostnames:
- scorer-dev.ml.mdp.ru
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: scorer
port: 8080
Почему Gateway API лучше для команд.
- Разделение RBAC: platform — Gateway; dev — HTTPRoute в
ml-dev. - Выразительность: weighted split (90% v1, 10% v2 модели), header-based routing (
X-Model-Version: canary). - GRPCRoute — first-class gRPC для Triton/KServe.
TLS и cert-manager. Аннотация cert-manager.io/cluster-issuer или отдельный Certificate создаёт Secret с TLS-сертификатом. Gateway/Ingress ссылается на этот Secret. Без Ready Certificate браузер получит ошибку TLS, даже если Pod healthy.
Path routing для ML.
/v1/predict→ scorer/docs→ Swagger UI того же Service/metrics→ иногда закрывают на network policy, не публикуют наружу
Canary через маршруты. Два backendRef с weight — простейший A/B без отдельного Istio VirtualService (зависит от реализации контроллера).
Как это выглядит на практике
Helm values для HTTPRoute:
ingress:
enabled: true
hostname: scorer-dev.ml.mdp.ru
gatewayName: shared-gateway
gatewayNamespace: ingress-system
Template рендерит HTTPRoute; Gateway уже существует в кластере.
Проверка после deploy:
kubectl get httproute -n ml-dev
kubectl describe httproute scorer -n ml-dev
curl -v https://scorer-dev.ml.mdp.ru/health
Типичные ошибки.
| Ошибка | Причина |
|--------|---------|
| 404 от gateway | hostnames не совпадает с запросом |
| 503 | backend Service без ready endpoints |
| TLS error | Certificate не Ready, неверный Secret |
| 403 от platform | HTTPRoute не approved (policy Gateway) |
Миграция Ingress → HTTPRoute. Часто идут параллельно: новые сервисы на Gateway API, старые на Ingress до cutover.
Что сделать после занятия
- [ ] Найдите HTTPRoute или Ingress своего учебного сервиса и сопоставьте hostname с Service port.
- [ ] Добавьте path
/healthв маршрут (если chart поддерживает) и проверьте curl. - [ ] Проверьте статус Certificate:
kubectl get certificate -n ml-dev.