Поиск по сайту:

Как настроить контроллер входа 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 стремится найти баланс между простотой использования и настройкой, гарантируя, что вы не привязаны к определенному набору параметров.




Все права защищены. © Linux-Console.net • 2019-2024