Зачем это нужно
Вы деплоите 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 — три слоя.
GatewayClass — «какой контроллер» (istio, nginx). Ставит platform team.
Gateway — listener'ы (порт 443, hostname, TLS cert).
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.