Как маршрутизировать трафик к Ingress-контроллеру внутри Kubernetes-кластера?

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

Ответ

Для доступа к Ingress-контроллеру изнутри кластера используется Service типа ClusterIP. Этот сервис предоставляет стабильный DNS-имя и внутренний IP-адрес для набора подов контроллера.

Пример манифеста Service для Ingress NGINX:

apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  type: ClusterIP
  ports:
  - name: http
    port: 80
    targetPort: http
    protocol: TCP
  - name: https
    port: 443
    targetPort: https
    protocol: TCP
  selector:
    app.kubernetes.io/name: ingress-nginx

Практическое использование:

  1. Внутрикластерные запросы: Другие сервисы в кластере могут направлять HTTP-запросы на этот Service по его DNS-имени (например, curl http://ingress-nginx-controller.ingress-nginx.svc.cluster.local). Ingress-контроллер, получив запрос, будет обрабатывать правила Ingress-ресурсов для маршрутизации к конечным сервисам приложений.
  2. Доступ извне кластера: Для внешнего доступа обычно используется Service типа LoadBalancer (в облаке) или NodePort (on-premise). Внутренний ClusterIP сервис при этом остается для внутрикластерной коммуникации.
  3. Важно: Убедитесь, что Ingress-контроллер слушает на портах, указанных в Service (обычно 80 и 443), и что Network Policies не блокируют трафик к его подам.