В чем разница между routes в OpenShift и Ingress в Kubernetes?

«В чем разница между routes в OpenShift и Ingress в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

OpenShift Route и Kubernetes Ingress решают одну задачу — внешняя маршрутизация HTTP/HTTPS трафика к сервисам внутри кластера, но делают это по-разному.

Kubernetes Ingress

  • Стандарт: Объект API Kubernetes (часть спецификации).
  • Требования: Для работы необходим контроллер Ingress (например, ingress-nginx, Traefik, HAProxy Ingress), который развертывается отдельно.
  • Конфигурация: Определяет правила маршрутизации на основе хоста и пути. Часто требует аннотаций для расширенной функциональности.
  • Пример Ingress-ресурса:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: myapp-ingress
    spec:
      rules:
      - host: myapp.example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: myapp-service
                port:
                  number: 80

OpenShift Route

  • Стандарт: Специфичный для OpenShift объект API (часть OpenShift API).
  • Требования: Использует встроенный HAProxy-роутер, который поставляется с платформой.
  • Конфигурация: Проще для базовых сценариев. Имеет встроенную поддержку расширенных функций TLS (Edge, Passthrough, Re-encrypt) без дополнительных аннотаций.
  • Пример Route-ресурса:
    apiVersion: route.openshift.io/v1
    kind: Route
    metadata:
      name: myapp-route
    spec:
      host: myapp.example.com
      to:
        kind: Service
        name: myapp-service
      port:
        targetPort: 8080
      tls:
        termination: edge # TLS-терминация на роутере
        insecureEdgeTerminationPolicy: Redirect

Ключевые отличия:

  1. Экосистема: Ingress — переносимый стандарт Kubernetes. Route — проприетарное, но мощное решение OpenShift.
  2. Простота: Route часто проще настроить "из коробки", особенно для TLS.
  3. Гибкость: Ingress с различными контроллерами может быть более гибким в кастомизации, но требует больше ручной настройки.