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

Как обратиться к внешнему IP-адресу Load Balancer сервиса через Ingress-контроллер в Kubernetes

2.0 Middle🔥 171 комментариев
#Kubernetes#Сети и протоколы

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

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

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

Подход к маршрутизации внешнего трафика через Ingress-контроллер в Kubernetes

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

Архитектурный контекст и компоненты

В типичной схеме:

  1. Сервис типа LoadBalancer (Service) — это Kubernetes1-ресурс, который, при поддержке облачного провайдера (AWS, GCP, Azure) или metalLB в on-premise, автоматически создаёт внешнюю балансировку нагрузки и назначает ей внешний IP-адрес (External IP). Этот сервис выступает точкой входа для трафика, направляя его на поды контроллера.
  2. Ingress1/Контроллер (Ingress Controller) — это под (или набор подов), работающий как обратный прокси-сервер (часто на базе Nginx, Traefik, HAProxy). Он обрабатывает правила, определённые в ресурсах Ingress, для маршрутизации HTTP/HTTPS трафика на внутренние сервисы приложений.
  3. Ресурс Ingress — это набор правил (правила хостов, пути), которые указывают контроллеру, как направлять входящий трафик.

Таким образом, цепочка выглядит так: Пользователь -> External IP LoadBalancer Service -> Поды Ingress Controller -> Ingress Rules -> Внутренние сервисы приложений.

Типовая конфигурация

Рассмотрим пример развёртывания ingress-nginx контроллера и приложения.

1. Создание сервиса Ingress-контроллера типа LoadBalancer

При установке контроллера (например, через Helm) его сервису часто назначается тип LoadBalancer. Вот фрагмент манифеста:

apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  type: LoadBalancer # Ключевой параметр
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
      name: http
    - port: 443
      targetPort: 443
      protocol: TCP
      name: https
  selector:
    app.kubernetes.io/name: ingress-nginx

После применения kubectl apply -f service.yaml облачный провайдер выделит внешний IP. Его можно найти командой:

kubectl get svc ingress-nginx-controller -n ingress-nginx
# В выводе будет колонка EXTERNAL-IP с адресом, например, 203.0.113.10

2. Создание ресурса Ingress для приложения

Этот ресурс указывает контроллеру направлять трафик, пришедший на определённый хост или путь, на внутренний сервис вашего приложения.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: myapp.example.com # Доменное имя для доступа
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-app-service # Внутренний ClusterIP сервис приложения
            port:
              number:   8080

3. Связывание доступа

  • Пользователь или DNS записывает домен myapp.example.com на внешний IP сервиса контроллера (например, 203.0.113.10).
  • Трафик на http://myapp.example.com попадает на облачный балансировщик (за сервисом LoadBalancer).
  • Балансировщик направляет его на один из подов ingress-nginx.
  • Поды контроллера, читая правила из ресурса my-app-ingress, проксируют запрос на внутренний сервис my-app-service:8080, который, в свою очередь, направляет его на конечные поды приложения.

Ключевые практические аспекты

  • Терминология: Не путайте ресурс Ingress (правила) и Ingress-контроллер (исполнитель правил). За доступ "из интернета" отвечает именно связка LoadBalancer Service + Ingress Controller Pods.
  • DNS и хосты: Для работы правил на основе хоста (host: в Ingress) необходимо, чтобы доменное имя резолвилось в этот внешний IP. В тестах можно использовать /etc/hosts или указывать IP напрямую, если правила не используют host или используют правило по умолчанию.
  • HTTPS/TLS: Для шифрования трафика необходимо настроить TLS Termination на уровне Ingress-контроллера. Секрет с сертификатом указывается в ресурсе Ingress:
spec:
  tls:
  - hosts:
      - myapp.example.com
    secretName: myapp-tls-secret
  rules:
  - host: myapp.example.com
    ...
  • Сетевая модель: Убедитесь, что сетевые политики (Network Policies) не блокируют трафик между неймспейсами, если контроллер и приложение разнесены.
  • Health Checks: Облачный Load Balancer выполняет проверки здоровья на порты пода контроллера. Убедитесь, что readiness/liveness пробы контроллера настроены корректно.

Итог: Для обращения к внешнему IP Load Balancer сервиса через Ingress-контроллер достаточно:

  1. Развернуть контроллер с сервисом типа LoadBalancer и получить его EXTERNAL-IP.
  2. Создать ресурс Ingress с правилами для вашего приложения.
  3. Направить DNS (или использовать IP напрямую) на этот внешний адрес. Весь последующий маршрутинг и балансировка внутри кластера будут управляться Ingress-контроллером согласно заданным правилам.
Как обратиться к внешнему IP-адресу Load Balancer сервиса через Ingress-контроллер в Kubernetes | PrepBro