03 · Платформа: DevOps, k8s, сеть, хранилище3.6 · API Gateway, Ingress и Istio3.6.2сложный

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.

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