За что отвечает сущность Ingress в Kubernetes
Что проверяют
Понимаете ли вы, как запрос снаружи попадает в приложение в кластере, и сможете ли по симптому понять, где он сломался: в приложении или по дороге. Тестировщику следом часто задают практический вопрос: «На стенде 502, куда смотреть?»
Как отвечать
Ingress это объект Kubernetes с правилами маршрутизации HTTP и HTTPS снаружи кластера к сервисам внутри. Сам он ничего не делает: правила исполняет Ingress Controller, обычный прокси в подах кластера (NGINX, Traefik, HAProxy, решения на Envoy). Без установленного контроллера объект просто лежит в API.
Что задаётся в Ingress:
- маршрутизация по хосту и пути:
api.stage.example.comведёт на одинService,/adminна другой, тип совпадения задаётpathType; - TLS: сертификат лежит в
Secret, шифрование заканчивается на контроллере, внутри кластера трафик может идти по HTTP; - поведение прокси через аннотации: таймауты, лимит размера тела, редиректы, CORS. Аннотации у каждого контроллера свои.
По сравнению с NodePort и LoadBalancer выигрыш в том, что десятки сервисов живут за одним внешним адресом и маршрутизируются по L7.
Для QA это полезно так. Стенды на ветку часто делают отдельным хостом в Ingress. Коды ошибок подсказывают виновника: 404 со страницей контроллера значит, что не совпало правило; 502 и 503 указывают на сервис без готовых подов или упавшее приложение; 504 это таймаут прокси; 413 означает лимит размера тела при загрузке файла. Смотреть стоит kubectl describe ingress и логи пода контроллера.
Хорошо упомянуть и развитие: API Ingress заморожен, новые возможности появляются в Gateway API, а сообщество Kubernetes объявило о прекращении поддержки популярного ingress-nginx, поэтому новые кластеры всё чаще строят на Gateway API.
Где спотыкаются
Путают Ingress и контроллер: думают, что достаточно применить манифест, и удивляются, что трафик не идёт.
Считают, что Ingress годится для любого трафика. Он про HTTP и HTTPS, базу данных или брокер по чистому TCP так не выставить без расширений конкретного контроллера.
Все ошибки на стенде списывают на бэкенд, хотя 413 или 504 выдаёт прокси, и до приложения запрос даже не дошёл.