← Назад к вопросам

Что такое Роуты (Routes) в Kubernetes и зачем они?

2.0 Middle🔥 71 комментариев
#Kubernetes

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Routes в Kubernetes?

Роуты (Routes) — это концепция, специфичная для платформы OpenShift (дистрибутива Kubernetes от Red Hat), которая представляет собой абстракцию над стандартными объектами Kubernetes Ingress. По своей сути, Route — это механизм для предоставления внешнего доступа к сервисам, работающим внутри кластера OpenShift, путем определения правил маршрутизации внешнего HTTP/HTTPS (и TLS) трафика на внутренние Services и Pods.

Если говорить простыми словами, Route — это «умный шлюз» или «правило», которое говорит: «Когда пользователь обращается по адресу app.example.com, весь трафик должен быть направлен на внутренний сервис my-app-service на порт 8080». В классическом Kubernetes аналогичную функцию выполняет объект Ingress, которому для работы требуется Ingress Controller (например, Nginx или Traefik). В OpenShift роль Ingress Controller выполняет встроенный компонент на основе HAProxyRouter.

Зачем нужны Routes? Ключевые цели

1. Предоставление внешнего доступа к приложениям

Основная задача Route — сделать внутренние сервисы доступными извне кластера. Без Route или Ingress сервисы обычно доступны только по внутренним DNS-именам (например, my-service.my-namespace.svc.cluster.local) внутри кластера. Route создает публичную точку входа.

2. Балансировка нагрузки и маршрутизация на уровне приложения (L7)

Route работает на 7-м уровне модели OSI (HTTP/HTTPS), что позволяет использовать сложную логику маршрутизации, невозможную для стандартного Kubernetes Service (который работает на L3/L4). Например:

  • Маршрутизация по хосту (host-based): Направлять трафик с разных доменных имен на разные сервисы.
    apiVersion: route.openshift.io/v1
    kind: Route
    metadata:
      name: frontend-route
    spec:
      host: shop.example.com
      to:
        kind: Service
        name: frontend-service
    
  • Маршрутизация по пути (path-based): Направлять трафик на разные сервисы в зависимости от URL-пути.
    apiVersion: route.openshift.io/v1
    kind: Route
    metadata:
      name: api-route
    spec:
      host: example.com
      path: "/api/"
      to:
        kind: Service
        name: backend-api-service
    

3. Управление TLS-терминацией

Одна из самых мощных возможностей Routes — гибкая настройка шифрования. OpenShift Router может обрабатывать TLS-сертификаты несколькими способами:

  • Edge Termination: TLS-расшифровка происходит на самом Router'е. Трафик внутри кластера идет в открытом виде. Это самый распространенный и простой в настройке вариант.
    spec:
      host: secure-app.example.com
      tls:
        termination: edge
        key: |-
          -----BEGIN PRIVATE KEY-----
          ...
        certificate: |-
          -----BEGIN CERTIFICATE-----
          ...
    
  • Passthrough Termination: Router передает зашифрованный TLS-трафик прямиком в Pod приложения. Терминация происходит внутри самого приложения, что обеспечивает сквозное шифрование (end-to-end encryption).
  • Re-encryption: Аналогичен Edge, но после расшифровки Router заново шифрует трафик, используя свой сертификат, для связи с Pod'ом. Повышает безопасность в сегменте между Router и Pod.

4. Упрощение работы разработчиков и DevOps

  • Интеграция с Let's Encrypt: OpenShift имеет встроенные механизмы для автоматического получения и обновления бесплатных TLS-сертификатов.
  • Собственный DNS: OpenShift может предоставлять для Route "волшебные" DNS-имена вида <route-name>-<project>.<router-canonical-hostname>, что идеально подходит для разработки и тестирования.
  • Безопасность: Routes интегрированы с системой ролей (RBAC) OpenShift, позволяя гибко управлять, кто может создавать или изменять правила доступа к приложениям.

5. Поддержка современных протоколов и шаблонов

Современные Router'ы в OpenShift поддерживают HTTP/2, WebSockets и могут использоваться для реализации паттернов Canary Deployments или A/B-тестирования за счет настройки весов трафика между несколькими сервисами.

# Пример Route с разделением трафика (Canary)
spec:
  host: canary-app.example.com
  to:
    kind: Service
    name: main-service
    weight: 90
  alternateBackends:
  - kind: Service
    name: canary-service
    weight: 10

Сравнение с Kubernetes Ingress

ФункцияOpenShift RouteKubernetes Ingress
СтандартПроприетарный объект OpenShift (route.openshift.io/v1)Стандартный объект Kubernetes (networking.k8s.io/v1)
КонтроллерВстроенный Router (на базе HAProxy)Требуется установка Ingress Controller (Nginx, Traefik и т.д.)
ПростотаВыше. Часто "работает из коробки".Ниже. Требует настройки и управления отдельным контроллером.
Гибкость TLSБолее богатые встроенные возможности (edge, passthrough, re-encrypt).Зависит от реализации контроллера. Часто требует дополнительных аннотаций.
ПереносимостьТолько в среде OpenShift.Работает в любом Kubernetes-кластере.

Вывод

Routes в OpenShift — это мощный и удобный инструмент для управления входящим сетевым трафиком, созданный для упрощения операций, которые в ванильном Kubernetes требуют настройки Ingress-ресурсов и внешних контроллеров. Они решают ключевые задачи публикации приложений, балансировки нагрузки, обеспечения безопасности через TLS и гибкой маршрутизации, будучи глубоко интегрированными в экосистему OpenShift с её функциями безопасности, мониторинга и самообслуживания. Для команд, работающих исключительно в OpenShift, использование Routes является естественным и оптимальным выбором, в то время как для мульти-кластерных сред, где важна переносимость, стоит рассматривать стандартные Kubernetes Ingress ресурсы.