- Home »

Как настроить Nginx Ingress в Kubernetes на DigitalOcean с Helm
В этой статье разберёмся, как быстро и без боли развернуть Nginx Ingress Controller в Kubernetes-кластере на DigitalOcean с помощью Helm. Почему это важно? Потому что Ingress — это не просто «ещё один прокси», а ключевой компонент для управления входящим трафиком в микросервисной архитектуре. Если вы хотите, чтобы ваши сервисы были доступны из интернета, не хотите возиться с десятками LoadBalancer’ов и платить за каждый, а ещё мечтаете о гибкой маршрутизации, HTTPS и автоматизации — добро пожаловать. Здесь будет всё: как это работает, как настроить, где можно облажаться, а где — сэкономить время и деньги. Погнали!
Как это работает: Ingress, Nginx и Kubernetes
Ingress Controller — это такой себе «швейцар» для вашего кластера: он встречает запросы снаружи и решает, куда их отправить внутри. В Kubernetes Ingress — это объект, который описывает правила маршрутизации, а Ingress Controller — приложение, которое эти правила реализует. Nginx — один из самых популярных контроллеров, потому что он быстрый, гибкий, с кучей фич и огромным комьюнити.
- Kubernetes — оркестратор контейнеров, управляет сервисами, подами, сетями.
- Ingress — объект, описывающий, как внешний трафик попадает к сервисам.
- Nginx Ingress Controller — приложение, следит за объектами Ingress и на лету генерирует конфиг для Nginx.
На DigitalOcean всё это работает через Managed Kubernetes (DOKS), где вы получаете кластер, а дальше — дело техники. Важно: DigitalOcean поддерживает автоматическое создание LoadBalancer’ов, но за каждый отдельный LB вы платите. Ingress позволяет обойтись одним LB на весь кластер, а дальше уже рулить маршрутизацией внутри.
Зачем нужен Helm и почему это удобно
Helm — это пакетный менеджер для Kubernetes. Если вы когда-нибудь ставили софт через apt
или yum
, то идея та же: берём готовый «чарт» (набор манифестов и шаблонов), настраиваем параметры и деплоим одной командой. Это быстрее, надёжнее и проще, чем писать YAML’ы руками.
- Быстрое развертывание сложных приложений
- Легко обновлять и откатывать релизы
- Можно хранить свои настройки отдельно
Пошаговая настройка: от кластера до работающего Ingress
Вот краткий план действий:
- Создать Kubernetes-кластер на DigitalOcean
- Установить
kubectl
иhelm
- Настроить доступ к кластеру
- Установить Nginx Ingress Controller через Helm
- Проверить работу и создать свой первый Ingress
1. Создаём кластер на DigitalOcean
Регистрируемся, создаём кластер через панель управления. Можно выбрать минимальный пул (например, 2x2GB). После создания скачиваем kubeconfig.
2. Устанавливаем kubectl и helm
# Для Ubuntu/Debian
sudo apt update
sudo apt install -y curl apt-transport-https
# kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
# helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
3. Подключаемся к кластеру
export KUBECONFIG=~/path/to/your/kubeconfig.yaml
kubectl get nodes
Если видите список нод — всё ок.
4. Устанавливаем Nginx Ingress Controller через Helm
# Добавляем репозиторий
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
# Устанавливаем в namespace ingress-nginx
kubectl create namespace ingress-nginx
helm install nginx-ingress ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--set controller.publishService.enabled=true
Параметр controller.publishService.enabled=true
нужен, чтобы Ingress корректно определял внешний адрес.
5. Проверяем работу
kubectl get svc -n ingress-nginx
Ищем сервис типа LoadBalancer
— там будет внешний IP. Это и есть точка входа в кластер.
6. Создаём свой первый Ingress
# Пример простого Ingress
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
namespace: default
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: example.yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: your-service
port:
number: 80
EOF
Не забудьте прописать DNS на внешний IP, который получили выше.
Плюсы и минусы: сравнение с альтернативами
Решение | Плюсы | Минусы | Когда использовать |
---|---|---|---|
Nginx Ingress |
|
|
99% случаев, когда нужен Ingress |
Traefik |
|
|
Когда нужен автоссl и простота |
MetalLB + NodePort |
|
|
Когда нужен bare-metal или экономия |
Практические советы и кейсы
- Положительный кейс: Один Ingress Controller на весь кластер, десятки сервисов, экономия на LoadBalancer’ах. Можно быстро деплоить новые сервисы, просто добавив Ingress-правило.
- Отрицательный кейс: Не выставили
controller.publishService.enabled=true
— Ingress не знает свой внешний IP, DNS не работает, сервисы недоступны. Решение: всегда читайте официальную документацию и внимательно смотрите параметры Helm-чарта. - Проблема с HTTPS: Не настроили TLS — браузеры ругаются на небезопасное соединение. Решение: используйте cert-manager для автоматического получения сертификатов Let’s Encrypt.
Автоматизация и новые возможности
С появлением Helm и Ingress можно автоматизировать деплой сервисов и их публикацию наружу. Например, в CI/CD пайплайне можно:
- Деплоить сервис через
kubectl apply
- Генерировать Ingress-манифесты на лету
- Обновлять Helm-релизы без даунтайма
- Использовать Helm hooks для миграций и health-check’ов
Это открывает дорогу к GitOps, когда всё инфраструктурное описание хранится в git-репозитории, а изменения применяются автоматически.
Интересные факты и нестандартные сценарии
- Можно использовать Nginx Ingress для A/B тестирования: через аннотации и правила маршрутизации отправлять часть трафика на новую версию сервиса.
- Ingress поддерживает rate limiting, basic auth, IP whitelist/blacklist — всё через аннотации.
- Можно деплоить несколько Ingress Controller’ов с разными ingressClass — например, один для публичных сервисов, другой для внутренних.
- Helm поддерживает шаблонизацию: можно генерировать разные конфиги для dev/stage/prod окружений.
Статистика и сравнение
- По данным CNCF, Nginx Ingress — самый популярный Ingress Controller в Kubernetes (используется в 60% production-кластеров).
- Helm — де-факто стандарт для деплоя приложений в Kubernetes (более 70% команд DevOps используют Helm-чарты).
- DigitalOcean Managed Kubernetes — один из самых простых для старта (интеграция с DO LoadBalancer, автоматические обновления, простое ценообразование).
Похожие решения и альтернативы
- Traefik — альтернатива с автоматическим SSL и красивой панелью.
- HAProxy Ingress — для любителей HAProxy и сложных L7/L4 сценариев.
- MetalLB — для bare-metal кластеров без облачных LB.
Выводы и рекомендации
Если вы хотите быстро и надёжно опубликовать свои сервисы в Kubernetes на DigitalOcean, Nginx Ingress Controller — ваш выбор. С помощью Helm вы экономите время и силы, получаете гибкость и возможность автоматизации. Не забывайте про безопасность (TLS, rate limiting), читайте документацию и не бойтесь экспериментировать с аннотациями и настройками.
- Используйте Nginx Ingress для большинства сценариев публикации сервисов.
- Helm — must-have для любого, кто работает с Kubernetes.
- DigitalOcean Managed Kubernetes — отличный старт для проектов любого масштаба.
- Не забывайте про автоматизацию: CI/CD, GitOps, cert-manager.
Если нужен VPS для экспериментов или продакшна — заказать VPS. Для серьёзных задач — выделенный сервер. Удачных деплоев и минимум даунтайма!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.