Как настроить контроллер входа NGINX в DigitalOcean Kubernetes
Управляемый сервис Kubernetes от DigitalOcean упрощает подготовку и обслуживание кластеров Kubernetes. Платформа представляет собой готовую основу для контейнерных рабочих нагрузок с поддержкой стандартных дополнительных приложений одним щелчком мыши.
В этой статье мы покажем, как использовать одно из этих дополнений для настройки контроллера NGINX Ingress в вашем кластере. Входы предоставляют механизм маршрутизации внешнего трафика к вашим службам на основе таких правил, как имя хоста, путь и заголовки. NGINX Ingress — один из самых популярных контроллеров Ingress; он использует веб-сервер NGINX в качестве обратного прокси-сервера, который направляет входящий трафик на правильный сервис Kubernetes.
Начиная
Вы должны создать кластер Kubernetes в своей учетной записи DigitalOcean, прежде чем следовать этому руководству. Мы также предполагаем, что вы знакомы с основами использования Kubernetes, Kubectl и облачной панели управления DigitalOcean.
Начните с входа в панель управления DigitalOcean, щелкните ссылку «Kubernetes» на левой боковой панели и выберите свой кластер на появившейся странице. Затем щелкните вкладку «Marketplace», чтобы просмотреть список доступных приложений 1-Click.
Что такое приложения в 1 клик?
Приложения Kubernetes 1-Click от DigitalOcean предоставляют предварительно настроенные установки для популярных внутрикластерных приложений. Приложения тестируются DigitalOcean, поэтому они гарантированно будут работать с каждой доступной версией Kubernetes.
Доступные приложения используют официальную диаграмму Helm от своего поставщика. Диаграммы дополнены настройками по умолчанию, предоставленными DigitalOcean в репозитории GitHub с открытым исходным кодом. Панель управления DigitalOcean позволяет устанавливать доступные диаграммы одним щелчком мыши, предоставляя простой способ начать работу с основными утилитами. Вам не нужно вручную устанавливать Helm и настраивать репозитории диаграмм.
Установка NGINX Ingress с помощью приложения 1-Click
Теперь вы можете использовать эту технику для добавления NGINX Ingress в свой кластер. Найдите приложение в магазине, прокрутив список вниз или используя панель поиска. Нажмите синюю кнопку «Установить» на карточке приложения и подтвердите запрос на подтверждение.
Процедура установки может занять несколько минут. Прогресс будет отображаться в веб-интерфейсе. Новый балансировщик нагрузки будет автоматически добавлен в вашу учетную запись в процессе настройки приложения. Этот балансировщик нагрузки будет оплачиваться по стандартной ставке и должен использоваться в качестве внешней точки входа для вашего кластера.
Ваш контроллер Ingress будет готов к использованию после завершения установки. Поскольку приложение 1-Click основано на диаграмме Helm, вы можете проверить, добавлено ли приложение, перечислив выпуски 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
Выпуск ingress-nginx
был добавлен DigitalOcean. Он отображается как deployed
, поэтому вы можете начать создавать ресурсы Ingress для маршрутизации трафика к вашим службам.
Использование вашего Ingress-контроллера
Вы можете протестировать свой контроллер Ingress, создав простое развертывание Kubernetes, службу и ресурсы Ingress:
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:
$ kubectl apply -f app.yaml
Поле spec.ingressClassName: nginx
в ресурсе Ingress означает, что он будет зарегистрирован во вновь установленном контроллере NGINX Ingress. Каждая реализация контроллера имеет собственное имя класса, поэтому вы можете использовать несколько контроллеров в одном кластере.
Затем настройте запись DNS для example.com
, которая указывает на внешний IP-адрес вашего балансировщика нагрузки DigitalOcean. Вы можете найти это, перейдя в «Сеть»> «Балансировщики нагрузки» в онлайн-панели управления или выполнив следующую команду 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
При посещении example.com
должна отображаться веб-страница Apache по умолчанию после того, как изменение DNS вступит в силу. Ваш контроллер Ingress получает запрос от балансировщика нагрузки. Он использует ваши ресурсы Ingress для выбора подходящей службы, в результате чего запросы к example.com
заканчиваются вашими контейнерами Apache.
Теперь вы можете следовать документации Kubernetes, чтобы создавать ресурсы Ingress, которые выражают правила маршрутизации службы, необходимые для ваших реальных приложений.
Добавление HTTPS
Конечные точки в рабочих кластерах должны быть защищены с помощью TLS. Вы можете настроить автоматические сертификаты HTTPS, добавив Cert-Manager в свой кластер вместе с NGINX Ingress Controller.
Cert-Manager доступен как дополнительное приложение 1-Click на DigitalOcean Marketplace. Вы можете повторить процедуру, использованную ранее: перейдите на страницу обзора вашего кластера в панели управления, перейдите на вкладку «Marketplace», найдите и установите приложение.
После завершения установки создайте эмитента сертификата, который будет использоваться для запроса сертификатов Let’s Encrypt:
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
Измените поле spec.acme.email
на свой собственный адрес электронной почты, чтобы Let’s Encrypt мог отправлять вам уведомления о ваших сертификатах. Затем примените манифест к вашему кластеру:
$ kubectl apply -f issuer.yml
Теперь вы можете обновить свой ресурс Ingress с поддержкой HTTPS:
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
указывает, что сертификат должен быть получен для домена example.com
. Будет использоваться эмитент сертификата letsencrypt-staging
, как указано в аннотации cert-manager.io/cluster-issuer
.
В приведенном выше примере используется промежуточная конечная точка Let’s Encrypt, которую рекомендуется использовать при тестировании развертывания. Вы можете переключиться на использование настоящих сертификатов, создав второго издателя, нацеленного на рабочие конечные точки. Скопируйте указанный выше манифест эмитента, замените letsencrypt-staging
на letsencrypt-production
и измените URL-адрес spec.acme.server
на https. ://acme-v02.api.letsencrypt.org/directory
. После этого вы можете обновить аннотацию cert-manager.io/cluster-issuer
вашего ресурса Ingress, указав ссылку на ваш новый эмитент letsencrypt-production
.
Управление вашей установкой NGINX Ingress
К сожалению, приложения DigitalOcean 1-Click только упрощают процесс установки. Вы сами по себе, когда дело доходит до управления и обновления ваших приложений. Поскольку приложения — это просто предварительно настроенные диаграммы Helm, это не так обременительно, как кажется.
Вы можете использовать локальную установку Helm CLI для обновления до новых выпусков NGINX Ingress:
$ helm upgrade ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx
--values values.yml
Сначала вам следует загрузить файл values.yml
из репозитория DigitalOcean Marketplace. Это гарантирует, что новая версия будет настроена с вашими существующими настройками. Вы также можете использовать эту процедуру для настройки контроллера Ingress с вашими собственными настройками после первоначальной установки. Измените файл values.yml
, а затем выполните команду helm upgrade
.
Удаление NGINX Ingress из вашего кластера
Вы можете полностью удалить NGINX Ingress из своего кластера, удалив выпуск Helm приложения и удалив созданное пространство имен:
$ helm uninstall ingress-nginx --namespace ingress-nginx
$ kubectl delete namespace ingress-nginx
Балансировщик нагрузки должен очищаться автоматически. Вы можете вручную удалить его со страницы «Сеть»> «Балансировщики нагрузки» в панели управления DigitalOcean, если вам нужно. Нажмите кнопку «Дополнительно» рядом с балансировщиком нагрузки, затем выберите «Уничтожить» в раскрывающемся меню. Вы не сможете восстановить выделенный IP-адрес.
Установка NGINX Ingress с Doctl
Вы можете установить приложения 1-Click с помощью клиента командной строки DigitalOcean Doctl. Начните с получения списка ваших кластеров Kubernetes:
$ 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 <cluster-id> \
--1-clicks ingress-nginx
Используйте этот вариант, если вы хотите также установить Cert-Manager:
$ doctl kubernetes 1-click install <cluster-id> \
--1-clicks ingress-nginx,cert-manager
Помимо использования Doctl, вы также можете напрямую взаимодействовать с DigitalOcean API, чтобы программно добавлять новые приложения в свой кластер.
Краткое содержание
Вы можете быстро добавить контроллер NGINX Ingress в кластер DigitalOcean Kubernetes с помощью приложения 1-Click, доступного в Marketplace. Это развертывает предварительно настроенный выпуск диаграммы NGINX Ingress Helm с готовой к использованию конфигурацией.
Хотя это ускоряет первоначальную подготовку, вам все равно придется вручную запускать команды Helm для управления и обновления вашей установки. Приложение 1-Click стремится найти баланс между простотой использования и настройкой, гарантируя, что вы не привязаны к определенному набору параметров.