Ingress для внешнего доступа
Настройте Ingress для управления внешним доступом к сервисам, включая маршрутизацию HTTP/S и балансировку нагрузки.
«Ingress для внешнего доступа» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
За пределами NodePort и LoadBalancer
Мы рассмотрели разные типы сервисов Kubernetes, такие как NodePort и LoadBalancer, для внешнего открытия приложений.
Хотя они полезны, управление сложными требованиями к внешнему доступу с их помощью может стать неудобным — особенно если нужно разместить много приложений или API на одном IP-адресе с определенными правилами маршрутизации.
Здесь на помощь приходит входящий трафик, предлагающий более мощное и гибкое решение.
Знакомство с входящим трафиком Kubernetes
Входящий трафик — это объект API Kubernetes, который управляет внешним доступом к сервисам в кластере, главным образом для трафика HTTP и HTTPS.
- Он служит единой точкой входа для внешних запросов.
- Он позволяет выполнять маршрутизацию HTTP/S на основе имен узлов или путей URL.
- Он также может обеспечивать такие возможности, как завершение SSL/TLS и балансировка нагрузки.
Представьте входящий трафик как интеллектуального диспетчера, который направляет веб-трафик к нужным внутренним сервисам.
Контроллер входящего трафика
Сам ресурс входящего трафика представляет собой лишь набор правил и напрямую не обрабатывает трафик. Чтобы он работал, в кластере должен быть запущен контроллер входящего трафика.
Контроллер входящего трафика отслеживает ресурсы входящего трафика и настраивает внешний балансировщик нагрузки (или обратный прокси) в соответствии с заданными правилами.
К популярным контроллерам входящего трафика относятся Nginx, Traefik и специализированные облачные решения, такие как GCE Ingress для Google Cloud или AWS Load Balancer Controller.
Как работают правила входящего трафика
Входящий трафик определяет правила, сопоставляющие входящие внешние запросы с конкретными внутренними сервисами в кластере. Обычно эти правила задают:
- Узел: имя домена (например,
www.my-app.com). - Путь: путь URL (например,
/api,/blog). - Внутренний сервис: сервис Kubernetes и порт, на которые следует перенаправить трафик.
Контроллер входящего трафика проверяет эти правила для каждого входящего запроса, чтобы определить правильное назначение.
Создание YAML входящего трафика
Как и другие ресурсы Kubernetes, входящий трафик определяется с помощью манифеста YAML. Ниже показана базовая структура с основными полями:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-web-service
port:
number: 80Простой входящий трафик на основе пути
Создадим ресурс входящего трафика, который направляет весь трафик для корневого пути (/) домена myapp.example.com к сервису с именем my-web-service на порту 80.
Перед применением этого ресурса убедитесь, что в кластере запущены развертывание и сервис с именем my-web-service.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: basic-app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-web-service
port:
number: 80Развертывание входящего трафика
Чтобы развернуть ресурс входящего трафика, сохраните YAML в файл (например, basic-ingress.yaml) и используйте kubectl apply:
kubectl apply -f basic-ingress.yaml
Проверить состояние входящего трафика можно с помощью kubectl get ingress. После этого контроллер входящего трафика настроит внешний балансировщик нагрузки на основе этих правил.
Для проверки обычно нужно изменить локальный файл /etc/hosts (или настройки DNS), указав для myapp.example.com внешний IP-адрес контроллера входящего трафика.
Пример маршрутизации на основе узла
Входящий трафик идеально подходит для размещения нескольких приложений на одном внешнем IP-адресе с использованием разных имен узлов. В этом примере app1.example.com направляется к service-app1, а app2.example.com — к service-app2.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: host-routing-ingress
spec:
rules:
- host: app1.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service-app1
port:
number: 80
- host: app2.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service-app2
port:
number: 80Несколько путей, один узел
Также можно направлять разные пути URL одного имени узла к разным внутренним сервисам. Это особенно удобно в архитектурах микросервисов или для разных разделов одного приложения.
Например, запросы к api.example.com/users направляются к users-service, а запросы к api.example.com/products — к products-service.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: path-routing-ingress
spec:
rules:
- host: api.example.com
http:
paths:
- path: /users
pathType: Prefix
backend:
service:
name: users-service
port:
number: 80
- path: /products
pathType: Prefix
backend:
service:
name: products-service
port:
number: 80Проверка назначения входящего трафика
Какие из перечисленных вариантов являются основными преимуществами использования входящего трафика Kubernetes?
Итоги: входящий трафик для интеллектуальной маршрутизации
Отличная работа! Вы изучили входящий трафик Kubernetes — важный компонент управления взаимодействием внешних пользователей с вашими приложениями.
- Входящий трафик обеспечивает гибкую маршрутизацию HTTP/S на основе имен узлов и путей URL.
- Для отслеживания правил входящего трафика и настройки маршрутизации ему требуется контроллер входящего трафика (например, Nginx).
- Он упрощает открытие нескольких сервисов через один внешний IP-адрес, делая кластер эффективнее и удобнее в управлении.
Освоение входящего трафика — ключ к созданию надежных и доступных облачных приложений!
Часто задаваемые вопросы
Урок «Ingress для внешнего доступа» бесплатный?
Да — полный текст урока «Ingress для внешнего доступа» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Ingress для внешнего доступа»?
Настройте Ingress для управления внешним доступом к сервисам, включая маршрутизацию HTTP/S и балансировку нагрузки. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Ingress для внешнего доступа»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Открытие доступа к приложениям с помощью сервисов
- Типы сервисов: ClusterIP, NodePort, LoadBalancer
- Ingress для внешнего доступа
- DNS и обнаружение служб