Разбираем, как работает Ingress и Ingress Controller в Kubernetes. Поясним разницу между правилами маршрутизации, доменами и путями, покажем, как разворачивать Contour и настраивать доступ к сервисам.
Ingress и Ingress Controller
- Ingress — объект кластера, где задаются правила маршрутизации.
- Ingress Controller — реально обрабатывает входящий трафик, смотрит на все Ingress объекты и делает прокси/балансировку.

Ingress по хостам
Маршрутизация трафика по доменам:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-hosts
spec:
rules:
- host: www.devopz.tech.net
http:
paths:
- backend:
serviceName: main
servicePort: 80
- host: web1.devopz.tech.net
http:
paths:
- backend:
serviceName: web1
servicePort: 80
- host: web2.devopz.tech.net
http:
paths:
- backend:
serviceName: web2
servicePort: 80
- host: cat.devopz.tech.net
http:
paths:
- backend:
serviceName: tomcat
servicePort: 8080
Ingress по путям
Маршрутизация трафика по URL-путям:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-paths
spec:
rules:
- host: www.devopz.tech.net
http:
paths:
- path: "/page1"
backend:
serviceName: webx
servicePort: 80
- path: "/page2"
backend:
serviceName: webx
servicePort: 80
- path: "/page3"
backend:
serviceName: webx
servicePort: 80
Установка Contour Ingress Controller
# Устанавливаем Contour
kubectl apply -f https://projectcontour.io/quickstart/contour.yaml
# Проверяем Service envoy, получаем IP или DNS для домена
kubectl get services -n projectcontour envoy -o wide
Создание Deployments
# Разворачиваем веб-приложения
kubectl create deployment main --image=nginx:latest
kubectl create deployment web1 --image=nginx:version1
kubectl create deployment web2 --image=nginx:version2
kubectl create deployment webx --image=nginx:versionx
kubectl create deployment tomcat --image=tomcat:8.5.38
Масштабирование Deployments
# Увеличиваем количество реплик
kubectl scale deployment main --replicas 2
kubectl scale deployment web1 --replicas 2
kubectl scale deployment web2 --replicas 2
kubectl scale deployment webx --replicas 2
Создание Services
# Создаем ClusterIP Services для каждого Deployment
kubectl expose deployment main --port 80
kubectl expose deployment web1 --port 80
kubectl expose deployment web2 --port 80
kubectl expose deployment webx --port 80
kubectl expose deployment tomcat --port 8080
# Проверяем созданные сервисы
kubectl get services -o wide
Применение Ingress
# Применяем файлы Ingress
kubectl apply -f ingress-hosts.yaml
kubectl apply -f ingress-paths.yaml
# Смотрим, какие Ingress объекты есть
kubectl get ingress
kubectl describe ingress
Удаление Contour
# Полностью удаляем Contour
kubectl delete ns projectcontour
Команды Ingress и Ingress Controller
| Команда | Что делает |
|---|---|
| kubectl get ingress | Показать все Ingress объекты в текущем namespace |
| kubectl describe ingress <имя> | Показать детали Ingress: хосты, пути, сервисы |
| kubectl apply -f ingress-hosts.yaml | Применить правила Ingress по хостам |
| kubectl apply -f ingress-paths.yaml | Применить правила Ingress по путям |
| kubectl delete ingress <имя> | Удалить Ingress объект |
| kubectl get services -n projectcontour | Проверить Service Envoy у Contour, чтобы узнать IP или DNS |
| kubectl get pods -n projectcontour | Проверить статус Pod’ов Contour |
| kubectl delete ns projectcontour | Удалить Contour Ingress Controller полностью |
| kubectl logs <pod> -n projectcontour | Посмотреть логи Ingress Controller |
| kubectl exec -it <pod> -n projectcontour -- bash | Зайти внутрь Pod’а Contour интерактивно |
Вывод
Ingress + Ingress Controller — точка входа для всего внешнего трафика в Kubernetes. Ingress описывает правила маршрутизации, а Controller их исполняет. С помощью Contour можно легко управлять доступом к сервисам, SSL и балансировкой, не прописывая всё руками на уровне Node/Pod.