Установка NGINX Ingress на DigitalOcean Kubernetes
Быстрые ссылки
- Getting Started
- What Are 1-Click Apps?
- Installing NGINX Ingress With the 1-Click App
- Using Your Ingress Controller
- Adding HTTPS
- Managing Your NGINX Ingress Installation
- Removing NGINX Ingress From Your Cluster
- Installing NGINX Ingress With Doctl
- Summary

Введение
DigitalOcean Managed Kubernetes упрощает развёртывание и поддержку кластеров Kubernetes. Платформа предоставляет готовую базу для контейнеризованных приложений и предлагает 1-Click Apps — предварительно настроенные приложения, которые ставятся одним кликом.
В этой статье подробно описано, как с помощью 1-Click App установить NGINX Ingress Controller в ваш кластер. Ingress — это объект Kubernetes, который маршрутизирует внешний HTTP/HTTPS‑трафик к сервисам кластера по правилам (hostname, path, заголовки). NGINX Ingress использует веб‑сервер NGINX как обратный прокси для передачи входящих запросов к нужным сервисам.
Краткое определение: Ingress — Kubernetes-объект для маршрутизации HTTP/HTTPS трафика во внутренние сервисы.
Требования перед началом
- Аккаунт DigitalOcean с созданным Kubernetes-кластером. Обычно кластер создаётся из панели управления DigitalOcean.
- Базовое знание Kubernetes, kubectl и работы с панелью DigitalOcean.

Совет: откройте панель DigitalOcean, перейдите в раздел «Kubernetes», выберите нужный кластер и вкладку «Marketplace», чтобы увидеть доступные 1-Click Apps.
Что такое 1-Click Apps
DigitalOcean Kubernetes 1-Click Apps — это готовые установки популярных in-cluster приложений. DigitalOcean тестирует эти установки с поддерживаемыми версиями Kubernetes и использует официальные Helm charts поставщиков, дополненные дефолтными настройками из открытого репозитория DigitalOcean.
Преимущества:
- Меньше ручной работы: не нужно вручную настраивать Helm репозитории.
- Совместимость: приложения проверены DigitalOcean для конкретных версий Kubernetes.
- Быстрый старт: один клик в UI либо команда через doctl.
Ограничения:
- Управление и обновления остаются за вами после установки.
- Для кастомизации всё равно потребуется знакомство с Helm values и kubectl.
Установка NGINX Ingress через 1-Click App (UI)
Найдите NGINX Ingress в Marketplace (или воспользуйтесь поиском), нажмите кнопку «Install» и подтвердите установку.

Процесс установки может занять несколько минут. В процессе в вашей учётной записи автоматически создастся Load Balancer — это будет внешний вход в ваш кластер и он оплачивается отдельно по стандартным тарифам DigitalOcean.
Поскольку 1-Click App базируется на Helm chart, вы можете проверить наличие релиза Helm в кластере:
$ helm list --all-namespacesОжидаемый пример вывода (формат):
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx ingress-nginx 1 2022-05-30 14:46:37.591626084 +0000 UTC deployed ingress-nginx-4.1.0-beta.1 1.2.0-beta.1
Если релиз отображается как deployed — контроллер установлен и готов к использованию.
Тестирование Ingress Controller
Создайте простой deployment, service и Ingress, чтобы проверить работу контроллера. Ниже приведён минимальный манифест (app.yaml):
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-deployment
spec:
replicas: 1
selector:
matchLabels:
app: demo-app
template:
metadata:
labels:
app: demo-app
spec:
containers:
- name: demo-container
image: httpd:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: demo-service
spec:
selector:
app: demo-app
ports:
- port: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-ingress
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: demo-service
port:
number: 80Примените манифест:
$ kubectl apply -f app.yamlПолезное пояснение: поле spec.ingressClassName: nginx связывает Ingress с конкретным классом контроллера (в данном случае — NGINX). В кластере может работать несколько контроллеров с разными классами.
Далее настройте DNS запись для example.com, указывающую на внешний IP вашего Load Balancer. IP можно найти в панели DigitalOcean (Networking > Load Balancers) или через kubectl:
$ kubectl get service ingress-nginx-controller --namespace=ingress-nginxПример вывода:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer XXX.XXX.XXX.XXX 1.2.3.4 80:30547/TCP,443:32027/TCP 1d
После обновления DNS, при заходе на example.com вы должны увидеть стандартную страницу Apache, если всё настроено верно.
Добавление HTTPS (Cert-Manager + Let’s Encrypt)
В production обязательно использовать TLS. Для автоматического получения сертификатов рекомендуют добавить Cert-Manager в кластер и настроить ACME Issuer от Let’s Encrypt.
Cert-Manager также доступен как 1-Click App в Marketplace. Установите его так же, как NGINX Ingress.
Пример ClusterIssuer для тестовой (staging) среды:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
spec:
acme:
server: https://acme-staging-v02.api.letsencrypt.org/directory
email: example@example.com
privateKeySecretRef:
name: letsencrypt-staging
solvers:
- http01:
ingress:
class: nginxИзмените поле email на вашу почту. Примените:
$ kubectl apply -f issuer.ymlЗатем обновите ваш Ingress, чтобы Cert-Manager мог запросить сертификат:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-ingress
annotations:
kubernetes.io/ingress.class: ingress
cert-manager.io/cluster-issuer: letsencrypt-staging
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: demo-service
port:
number: 80
tls:
- hosts:
- example.comПояснение: в spec.tls перечисляются домены, для которых требуется сертификат. Для тестирования используйте staging Issuer, затем создайте production Issuer с сервером https://acme-v02.api.letsencrypt.org/directory и обновите аннотацию.
Важно: Let’s Encrypt имеет ограничения по количеству запросов на production; используйте staging для тестов.
Управление установкой NGINX Ingress
1-Click App упрощает установку, но управление (обновления, настройки) остаётся за вами. Поскольку приложение — это Helm chart, используйте локальный Helm для управления.
Обновление релиза:
$ helm upgrade ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--values values.ymlПеред апгрейдом скачайте values.yml из репозитория Marketplace DigitalOcean — это позволит сохранить текущие настройки. После скачивания вы можете модифицировать values.yml для добавления кастомных параметров.
Рекомендации:
- Делайте бэкап текущего values.yml и ресурсных описаний (kubectl get all -n ingress-nginx -o yaml).
- Тестируйте апгрейды в staging-кластере перед продом.
- Читайте release notes для Helm chart перед обновлением.
Удаление NGINX Ingress
Чтобы полностью удалить установку, деинсталлируйте Helm-релиз и удалите namespace:
$ helm uninstall ingress-nginx --namespace ingress-nginx
$ kubectl delete namespace ingress-nginx
Load balancer должен быть удалён автоматически. Если он остался, удалите его вручную в панели Networking > Load Balancers. Учтите: IP адрес будет утерян и не восстанавливается.
Установка через doctl (CLI)
Можно установить 1-Click Apps программно с помощью doctl.
Сначала получите список кластеров:
$ doctl kubernetes cluster listПример вывода (формат):
ID Name Region Version Auto Upgrade Status Node Pools
946407f3-abcd-123a-456b-6a0ec60f93bf demo-k8s lon1 1.22.8-do.1 false running demo-k8s-1
Затем установите NGINX Ingress, заменив
$ doctl kubernetes 1-click install \
--1-clicks ingress-nginx Или одновременно с Cert-Manager:
$ doctl kubernetes 1-click install \
--1-clicks ingress-nginx,cert-manager Также можно программно взаимодействовать с DigitalOcean API для автоматизации установки.
Когда этот подход подходит и когда нет
Подходит если:
- Нужен быстрый и проверенный способ развернуть Ingress в DigitalOcean.
- Вы хотите избежать ручной настройки Helm chart и зависимостей.
- Нужна стандартизация развёртывания через UI или doctl.
Не подходит если:
- Нужна полная кастомизация конфигурации контроллера до установки (требуется ручная подготовка values.yml и Helm install).
- Вы хотите использовать иной Ingress controller (например, Traefik) или сервис‑mesh (Istio), где другие требования к интеграции.
Альтернативы:
- Traefik — простой встроенный Let’s Encrypt, удобен для быстрых динамических настроек.
- Istio/Linkerd — сервис‑мэш с расширенным контролем трафика и телеметрией.
- Собственная установка Helm chart — даёт полный контроль над values.yml.
Чек-лист: быстрое развёртывание (role-based)
DevOps / SRE:
- Создать/проверить кластер в DigitalOcean.
- Установить NGINX Ingress через Marketplace или doctl.
- Проверить создание Load Balancer и внешний IP.
- Настроить DNS запись на внешний IP.
- Установить Cert-Manager и настроить Issuer.
- Настроить мониторинг (metrics, alerts).
Разработчик:
- Создать тестовый Deployment/Service/Ingress.
- Убедиться, что ingressClassName совпадает с установленным классом.
- Провести smoke‑test по HTTP и HTTPS.
Производственная готовность (SRE):
- Автоматизация развёртывания (CI/CD) для values.yml и манифестов.
- План отката: helm rollback / backup манифестов.
- Контроль доступа: RBAC и аудит.
SOP: быстрый план установки и обновления
- Подготовка
- Убедитесь в наличии kubeconfig и доступа в DigitalOcean.
- Скачайте текущие values.yml из репозитория Marketplace.
- Установка
- Через UI: Marketplace → Install.
- Через doctl: doctl kubernetes 1-click install
–1-clicks ingress-nginx.
- Тестирование
- Разверните тестовый demo app и Ingress.
- Проверьте доступность по HTTP.
- HTTPS
- Установите Cert-Manager, примените ClusterIssuer (staging), обновите Ingress.
- Проверьте получение сертификата и доступность по HTTPS.
- Обновление
- Подготовьте values.yml и выполните helm upgrade.
- Откат
- Используйте helm rollback или восстановите значения и примените helm upgrade с предыдущим chart.
Критерии приёмки
- NGINX Ingress Controller развернут и статус компонентов — Ready.
- Внешний Load Balancer создан и IP доступен.
- DNS запись указывает на IP и домен отвечает по HTTP.
- Cert-Manager успешно выдал сертификат (либо staging, либо production) и HTTPS работает.
- Логи контроллера не содержат ошибок при обработке тестовых запросов.
Тесты и приёмка (acceptance)
- Smoke тест: curl -I http://example.com должен вернуть 200 OK.
- TLS тест: curl -I https://example.com должен вернуть 200 и корректный сертификат.
- Нагрузочный тест: маленький нагрузочный пробег (например, 1000 запросов) чтобы проверить стабильность LB.
Типичные ошибки и устранение неисправностей
- Неправильный IngressClass: проверьте поле ingressClassName и соответствие классу контроллера.
- Load Balancer без IP: проверьте квоты и статус создания в панели DigitalOcean.
- Cert-Manager не выдаёт сертификат: проверьте логи cert-manager и события (kubectl describe certificaterequest).
- DNS не обновился: проверьте TTL и корректность A/AAAA записи.
Полезные команды отладки:
$ kubectl -n ingress-nginx get pods
$ kubectl -n ingress-nginx logs
$ kubectl describe ingress demo-ingress
$ kubectl -n cert-manager get certificaterequests,certificates Безопасность и hardening
- Включите RBAC и минимальные права для сервисных аккаунтов.
- Включите TLS для всех публичных эндпоинтов.
- Ограничьте доступ к панели DigitalOcean и ключам API.
- Настройте WAF/сетевые политики при необходимости.
- Ограничьте размеры входящих заголовков и таймауты на стороне NGINX через values.yml.
Конфиденциальность и соответствие (GDPR)
Ingress сам по себе не хранит пользовательские данные, но через него проходят запросы. Если вы обрабатываете персональные данные:
- Убедитесь, что логи, метрики и бэкапы хранится в согласии с политиками конфиденциальности.
- При использовании сторонних сервисов (например, сторонних логирующих решений) проверьте юридическую совместимость.
Миграция и совместимость
Если вы уже используете другой Ingress controller:
- Параллельно установите NGINX Ingress с другим ingressClassName.
- Переносите Ingress ресурсы по одному, тщательно тестируя трафик.
- Убедитесь, что аннотации и правила совместимы с NGINX (некоторые аннотации специфичны для других контроллеров).
Шаблоны и подсказки (cheat sheet)
Применение манифеста:
$ kubectl apply -f app.yamlПросмотр сервиса ingress-nginx:
$ kubectl get svc -n ingress-nginxПолучение логов:
$ kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginxHelm upgrade с кастомными значениями:
$ helm upgrade ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --values values.ymlУдаление и очистка:
$ helm uninstall ingress-nginx --namespace ingress-nginx
$ kubectl delete namespace ingress-nginxКороткая сводка
Установка через 1-Click App — быстрый путь поставить NGINX Ingress в DigitalOcean Kubernetes. Для production нужно дополнительно настроить HTTPS (Cert-Manager), мониторинг и процедуры обновления/отката. Управление конфигурацией осуществляется через Helm values.
Важное: 1-Click App упрощает установку, но не снимает с вас ответственности за дальнейшее сопровождение и безопасность.