Короткий ответ
Ingress работает на уровне HTTP/HTTPS (L7) и позволяет одним внешним точкой входа маршрутизировать трафик к разным сервисам по доменному имени или пути URL, а также централизованно управлять TLS, тогда как Service type: LoadBalancer создаёт отдельный балансировщик на каждый сервис и работает на уровне TCP/UDP (L4).
Как это работает подробнее
Ingress — это набор правил маршрутизации (host/path → Service), который читает Ingress-контроллер (например, NGINX Ingress Controller, Traefik), работающий как отдельный под или набор подов с собственным Service типа LoadBalancer или NodePort. Сам объект Ingress без установленного контроллера ничего не делает.
Пример кода
manifest.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata: { name: app-ingress }
spec:
ingressClassName: nginx
rules:
- host: shop.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service: { name: shop, port: { number: 80 } }Что использовать на практике
- Практика. вместо десяти сервисов с типом
LoadBalancer(и, соответственно, десяти облачных балансировщиков) можно развернуть один Ingress-контроллер с одним внешним IP и описать правила маршрутизации по доменам/путям для всех сервисов — это снижает расходы и упрощает управление TLS-сертификатами в одном месте.
Подводные камни
- Риски. ожидать, что создание объекта Ingress само по себе откроет внешний доступ без установленного в кластере Ingress-контроллера; путать Ingress (L7, HTTP-маршрутизация) с Service LoadBalancer (L4, проброс портов); не учитывать, что для нескольких Ingress-контроллеров в одном кластере нужно явно указывать
ingressClassName.