Ingress против LoadBalancer: выбор правильного инструмента для вашего кластера Kubernetes

Когда дело доходит до управления трафиком в кластере Kubernetes, есть два популярных варианта: Ingress и LoadBalancer. Оба служат схожим целям, но имеют разные функции и варианты использования. В этой статье мы углубимся в различия между Ingress и LoadBalancer и рассмотрим различные методы их эффективного использования.

  1. Вход:

Ingress — это объект API в Kubernetes, который управляет внешним доступом к службам внутри кластера. Он действует как балансировщик нагрузки уровня 7 (уровень приложений) и обеспечивает расширенные возможности маршрутизации. Вот несколько способов использовать Ingress:

a) Контроллер Nginx Ingress:
Одна из популярных реализаций Ingress — использование контроллера Ingress Nginx. Он позволяет определять правила маршрутизации с помощью аннотаций и поддерживает завершение SSL, балансировку нагрузки и маршрутизацию на основе пути. Вот пример:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
          - path: /app
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 80

b) Контроллер Ingress Traefik:
Traefik — еще один популярный контроллер Ingress, предлагающий функции, аналогичные Nginx. Он поддерживает динамическую настройку, автоматическое предоставление сертификатов SSL и хорошо интегрируется с Kubernetes. Вот пример:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    traefik.ingress.kubernetes.io/rule-type: PathPrefixStrip
spec:
  rules:
    - http:
        paths:
          - path: /app
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 80
  1. LoadBalancer:

LoadBalancer — еще один тип службы Kubernetes, обеспечивающий внешний доступ к службам. Он действует как балансировщик нагрузки уровня 4 (транспортный уровень) и распределяет трафик по набору серверных модулей. Вот несколько способов использования LoadBalancer:

a) NodePort:
Тип службы NodePort предоставляет службу на статическом порту на каждом узле кластера. Этот подход позволяет внешнему трафику достигать службы через IP-адрес любого узла и определенный порт. Вот пример:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 8080
      nodePort: 30080
  selector:
    app: my-app

b) Внешние IP-адреса:
В этом методе вы можете назначить внешний IP-адрес непосредственно службе. Трафик будет направляться в сервис через назначенный внешний IP-адрес. Вот пример:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer
  externalIPs:
    - 203.0.113.1
  ports:
    - port: 80
      targetPort: 8080
  selector:
    app: my-app

Выбор между Ingress и LoadBalancer зависит от ваших конкретных требований и сложности маршрутизации трафика в вашем кластере Kubernetes. Ingress предоставляет расширенные возможности маршрутизации на уровне приложений, а LoadBalancer обеспечивает простоту на транспортном уровне. Понимая различия и используя упомянутые выше методы, вы сможете эффективно управлять трафиком в своей среде Kubernetes.