Гид по технологиям

Установка NGINX Ingress на DigitalOcean Kubernetes

8 min read Kubernetes Обновлено 19 Dec 2025
NGINX Ingress на DigitalOcean Kubernetes
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 и Kubernetes

Введение

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.

Скриншот страницы кластеров Kubernetes в панели управления 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» и подтвердите установку.

Скриншот установки NGINX Ingress как 1-Click App в DigitalOcean

Процесс установки может занять несколько минут. В процессе в вашей учётной записи автоматически создастся 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 в DigitalOcean

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, заменив на ваш ID:

$ 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: быстрый план установки и обновления

  1. Подготовка
    • Убедитесь в наличии kubeconfig и доступа в DigitalOcean.
    • Скачайте текущие values.yml из репозитория Marketplace.
  2. Установка
    • Через UI: Marketplace → Install.
    • Через doctl: doctl kubernetes 1-click install –1-clicks ingress-nginx.
  3. Тестирование
    • Разверните тестовый demo app и Ingress.
    • Проверьте доступность по HTTP.
  4. HTTPS
    • Установите Cert-Manager, примените ClusterIssuer (staging), обновите Ingress.
    • Проверьте получение сертификата и доступность по HTTPS.
  5. Обновление
    • Подготовьте values.yml и выполните helm upgrade.
  6. Откат
    • Используйте 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-nginx

Helm 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 упрощает установку, но не снимает с вас ответственности за дальнейшее сопровождение и безопасность.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как сделать облачка речи в PowerPoint
Дизайн

Как сделать облачка речи в PowerPoint

Как извлечь аудио из FLV (YouTube)
Аудио/Видео

Как извлечь аудио из FLV (YouTube)

Как добавлять подписи к фото на iPhone и iPad
Фото

Как добавлять подписи к фото на iPhone и iPad

Как мобильные игры вредят здоровью и что делать
Здоровье

Как мобильные игры вредят здоровью и что делать

Отключить местоположение на Android
Приватность

Отключить местоположение на Android

Обработка RAW с RawTherapee
Фотография

Обработка RAW с RawTherapee