MLOps Path

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 лучше для команд.

TLS и cert-manager. Аннотация cert-manager.io/cluster-issuer или отдельный Certificate создаёт Secret с TLS-сертификатом. Gateway/Ingress ссылается на этот Secret. Без Ready Certificate браузер получит ошибку TLS, даже если Pod healthy.

Path routing для ML.

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.

Что сделать после занятия

Официальные материалы

Открыть интерактивную версию