Gateway API против Ingress в Kubernetes

Сетевые настройки в Kubernetes могут сбивать с толку, особенно когда вы хотите открыть доступ к сервисам извне. Самые популярные способы — это Ingress и более современный Gateway API.

Разберём, чем они отличаются и когда использовать каждый из них.

Что такое Ingress?

Ingress — это объект Kubernetes, который описывает правила маршрутизации HTTP/HTTPS трафика к вашим сервисам. Для его работы требуется Ingress Controller, например NGINX или Traefik.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 80

Плюсы Ingress

  • Просто настроить
  • Подходит для небольших проектов
  • Широко поддерживается

Минусы

  • Ограниченные возможности
  • Сильно зависит от реализации
  • Сложно расширять

Что такое Gateway API?

Gateway API — это более современный и гибкий способ управления сетевыми входами. Он предлагает больше возможностей, лучшую структуру и консистентное поведение.

Новые ресурсы:

  • GatewayClass
  • Gateway
  • HTTPRoute
  • TCPRoute

Пример:

apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
  name: my-gateway
spec:
  gatewayClassName: nginx
  listeners:
    - name: http
      port: 80
      protocol: HTTP
---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
  name: my-route
spec:
  parentRefs:
    - name: my-gateway
  rules:
    - matches:
        - path:
            type: PathPrefix
            value: /
      backendRefs:
        - name: my-service
          port: 80

Основные отличия

ВозможностьIngressGateway API
РасширяемостьНизкаяВысокая
Основан на CRDНетДа
МногопротокольностьТолько HTTP/HTTPSTCP/UDP поддержка
Разделение ролейСлабоеЧёткое
БудущееУстаревающийСовременный

Когда что использовать?

  • Ingress подойдёт для простых HTTP приложений.
  • Gateway API стоит использовать, если нужен контроль, гибкость и перспективность.

Заключение

Ingress — это рабочее решение, но будущее за Gateway API. Если вы только начинаете — используйте Gateway API.