Ответ вслух Junior Service и Ingress обновлено

Как открыть приложение наружу

Вопрос

Как открыть HTTP-приложение в Kubernetes пользователям из интернета? Какие варианты и чем они отличаются?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Внутри приложение всегда за Service типа ClusterIP. Дальше варианты.

Что должно прозвучать в ответе

  • Service ClusterIP для приложения в любом случае

  • NodePort: порт на каждом узле, просто, но неудобные порты и нет L7

  • LoadBalancer: внешний балансировщик на сервис, L4, каждый сервис отдельный IP и стоимость

  • Ingress (или Gateway API): один вход, маршрутизация по хосту и пути, TLS в одном месте

  • Ingress-контроллер сам обычно открыт через LoadBalancer

  • TLS: cert-manager выпускает и продлевает сертификаты

Что могут спросить следом

  • Зачем Gateway API, если есть Ingress?
  • Где терминировать TLS?

Разбор

Внутри приложение всегда за Service типа ClusterIP. Дальше варианты. NodePort открывает порт из высокого диапазона на каждом узле, годится для тестов или когда перед кластером свой внешний балансировщик. LoadBalancer просит у облака внешний балансировщик для конкретного сервиса: это L4, у каждого сервиса свой IP, и при десятке сервисов это дорого. Для HTTP обычный путь это Ingress или Gateway API: один вход, контроллер маршрутизирует по хосту и пути на разные сервисы, TLS терминируется в одном месте. Сам Ingress-контроллер при этом обычно открыт одним сервисом LoadBalancer. Сертификаты выпускает и продлевает cert-manager через Let's Encrypt и кладёт в Secret. Gateway API это следующее поколение того же подхода: роли разделены, а веса трафика и заголовки стандартизованы.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме