Gymterview
middle

Что такое Ingress и Ingress Controller?

Ingress — объект Kubernetes, который управляет внешним HTTP/HTTPS-доступом к сервисам внутри кластера. Позволяет определять правила маршрутизации на основе хоста и пути запроса.

Зачем нужен Ingress, если есть Service LoadBalancer

  • Service LoadBalancer создаёт отдельный балансировщик для каждого сервиса — это дорого
  • Ingress позволяет использовать один балансировщик для множества сервисов, маршрутизируя трафик по правилам
  • Ingress поддерживает SSL/TLS-терминацию, перенаправление, URL rewriting
Пример манифеста Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - myapp.example.com
      secretName: myapp-tls-secret
  rules:
    - host: myapp.example.com
      http:
        paths:
          - path: /api
            pathType: Prefix
            backend:
              service:
                name: backend-service
                port:
                  number: 80
          - path: /
            pathType: Prefix
            backend:
              service:
                name: frontend-service
                port:
                  number: 80

Ingress Controller

Сам объект Ingress — это просто набор правил. Для их реализации необходим Ingress Controller — отдельный компонент, который считывает правила Ingress и настраивает реальный прокси-сервер.

Популярные Ingress Controller’ы:

  • NGINX Ingress Controller — самый популярный, на базе NGINX
  • Traefik — лёгкий, с автоматическим обнаружением сервисов
  • HAProxy Ingress — на базе HAProxy
  • AWS ALB Ingress Controller — для AWS Application Load Balancer
  • Istio Ingress Gateway — часть service mesh Istio

Ingress Controller необходимо устанавливать отдельно — он не входит в стандартную поставку Kubernetes.

На собеседовании: ключевое — объяснить, зачем Ingress нужен поверх Service LoadBalancer (экономия ресурсов, единая точка входа, SSL-терминация). Частая ошибка — забыть, что Ingress без Ingress Controller не работает.