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

Как установить Kubernetes Cert-Manager и настроить Let’s Encrypt


Cert-Manager автоматизирует предоставление сертификатов в кластерах Kubernetes. Он предоставляет набор настраиваемых ресурсов для выпуска сертификатов и их прикрепления к службам.

Одним из наиболее распространенных вариантов использования является защита веб-приложений и API-интерфейсов с помощью сертификатов SSL от Let’s Encrypt. Вот как добавить Cert-Manager в ваш кластер, настроить эмитента сертификата Let’s Encrypt и получить сертификат для модулей, открытых через Ingress.

Установка диспетчера сертификатов

Cert-Manager проще всего установить с помощью Helm. Helm — это менеджер пакетов Kubernetes, который позволяет добавлять приложения в кластер с помощью репозиториев готовых диаграмм. Убедитесь, что у вас установлен и настроен Helm с подключением к вашему кластеру Kubernetes.

Начните с добавления репозитория Jetstack в вашу установку Helm. Jetstack изначально разработал Cert-Manager, прежде чем он был передан в дар CNCF.

helm repo add jetstack https://charts.jetstack.io
helm repo update

Теперь установите Cert-Manager в свой кластер:

helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.5.3 --set installCRDs=true

Замените указанный выше номер версии последним выпуском, указанным в документации Cert-Manager.

Команда установит Cert-Manager в новое пространство имен Kubernetes с именем cert-manager. Параметр installCRDs добавит пользовательские ресурсы Kubernetes Cert-Manager во время установки. Это работает только с Helm версии 3.2 и новее — если вы используете более старую версию, вы должны вручную добавить определения ресурсов с помощью Kubectl:

kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.crds.yaml

Добавление плагина Kubectl

Cert-Manager имеет подключаемый модуль Kubectl, который упрощает некоторые распространенные задачи управления. Он также позволяет проверить, запущен ли Cert-Manager и готов ли он обслуживать запросы.

Установите плагин, загрузив его архив и распаковав его в правильный каталог:

curl -L -o kubectl-cert-manager.tar.gz https://github.com/jetstack/cert-manager/releases/latest/download/kubectl-cert_manager-linux-amd64.tar.gz
tar xzf kubectl-cert-manager.tar.gz
sudo mv kubectl-cert_manager /usr/local/bin

Теперь используйте плагин, чтобы проверить, работает ли ваша установка Cert-Manager:

kubectl cert-manager check api

Вы должны увидеть следующий вывод:

The cert-manager API is ready

Теперь вы готовы добавить эмитента для получения сертификатов от Let’s Encrypt.

Создание эмитента сертификата

Эмитенты и эмитенты кластера — это ресурсы, которые предоставляют сертификаты для вашего кластера. Базовая установка Cert-Manager, созданная до сих пор, не способна выдавать сертификаты. Добавление эмитента, настроенного на использование Let’s Encrypt, позволяет вам динамически получать новые сертификаты для служб в вашем кластере.

Создайте файл YAML в своем рабочем каталоге и назовите его issuer.yml. Добавьте следующее содержимое:

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

Вы должны заменить адрес электронной почты своим контактным адресом электронной почты. Это будет включено в ваши сертификаты. Let’s Encrypt также может отправить вам электронное письмо на указанный адрес, если ему необходимо отправить вам оповещение о ваших сертификатах.

Мы создаем ClusterIssuer, так как они доступны для всех ресурсов в вашем кластере, независимо от пространства имен. Стандартный Issuer — это ресурс с пространством имен, который может предоставлять сертификаты только в пределах своего собственного пространства имен.

Наша конфигурация эмитента указывает Cert-Manager получать сертификаты с промежуточного сервера Let’s Encrypt. Рекомендуется использовать промежуточную среду во время настройки интеграции, чтобы избежать строгих ограничений производительности Let’s Encrypt.

Используйте kubectl, чтобы добавить эмитента в свой кластер:

kubectl create -f issuer.yml

Получение сертификата

Теперь вы можете использовать своего эмитента для получения сертификата для службы, предоставляемой через ресурс Ingress. Cert-Manager автоматически отслеживает ресурсы Ingress и создает сертификаты, используя конфигурацию в их поле tls. Вам просто нужно добавить аннотацию с именем эмитента или эмитента кластера, который вы хотите использовать.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: wordpress:latest
          ports:
            - containerPort: 80
 
---

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    port: 80
 
---

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt-staging
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            backend:
              serviceName: my-service
              servicePort: 80
  tls:
    - hosts:
      - example.com

Этот файл YAML определяет Pod, службу и Ingress, раскрывающие службу. Предполагается использование nginx-ingress в качестве контроллера Ingress. Pod запускает контейнер WordPress, который будет доступен через HTTPS по адресу example.com.

Наличие аннотации cert-manager.io/cluster-issuer в ресурсе Ingress будет обнаружено Cert-Manager. Он будет использовать эмитент кластера letsencrypt-staging, созданный ранее, для получения сертификата, охватывающего имена хостов, указанные в поле tls.hosts Ingress.

Использование Let’s Encrypt в продакшене

После успешного получения промежуточного сертификата вы можете перейти на рабочие серверы Let’s Encrypt. Промежуточные сертификаты действительны, но браузеры им не доверяют, поэтому перед запуском сайта вам необходимо получить замену в производственной среде.

Лучше всего добавить отдельный эмитент кластера для рабочего сервера. Затем вы можете сослаться на соответствующего издателя в каждом из ваших ресурсов Ingress, в зависимости от того, готовы ли они к работе.

Скопируйте конфигурацию эмитента, показанную выше, и измените поля name на letsencrypt-production. Затем замените URL-адрес сервера значением, показанным ниже:

https://acme-v02.api.letsencrypt.org/directory

Создайте новый эмитент в своем кластере:

kubectl create -f issuer-production.yml

Обновите свой ресурс Ingress, чтобы запросить производственный сертификат, изменив значение аннотации cert-manager.io/cluster-issuer на letsencrypt-production (или имя, которое вы присвоили ваш собственный производственный эмитент). Используйте kubectl, чтобы применить изменение:

kubectl apply -f my-ingress.yaml

Теперь у вас должен быть полностью включен HTTPS для вашего ресурса Ingress. Cert-Manager будет автоматически управлять вашими сертификатами и обновлять их до истечения срока их действия.

Обновление диспетчера сертификатов

Выпуски Cert-Manager обычно поддерживают обновления на месте с помощью Helm:

helm repo update
helm upgrade --version <new version> cert-manager jetstack/cert-manager

Сертификаты остаются доступными во время обновлений, но процесс обновления будет остановлен.

Несмотря на то, что обновления в настоящее время, как правило, просты, вы всегда должны просматривать примечания к выпуску, чтобы определить возможные изменения, которые необходимо внести. Это особенно важно, если вы обновляете Kubernetes или переходите с нескольких версий Cert-Manager. Если вы все еще используете более старую версию Kubernetes, возможно, вы используете устаревшую версию Cert-Manager, которая требует значительного ручного вмешательства для обновления.

Краткое содержание

Let’s Encrypt легко добавляется в кластер Kubernetes с помощью Cert-Manager. Вам нужно установить Cert-Manager с помощью Helm, создать эмитента, использующего Let’s Encrypt API, а затем сослаться на этого эмитента в своих ресурсах Ingress.

Вы можете предоставить Cert-Manager свою собственную конфигурацию для более продвинутых вариантов использования. Вы можете указать срок действия сертификата (используйте аннотацию cert-manager.io/duration Ingress), вручную объявить общее имя сертификата (cert-manager.io/common-name ) и использовать вызовы DNS вместо HTTP. Последний вариант может быть полезен в определенных сценариях, например, когда вы хотите получить групповой сертификат.

Простое использование для защиты веб-приложений и API должно работать как есть с использованием ресурсов, показанных выше. Проверка HTTP работает, манипулируя контроллером Ingress для предоставления временного URL-адреса .well-known, к которому Let’s Encrypt может получить доступ. Если ваш домен предоставляет правильное значение для этого URL-адреса, Let’s Encrypt считает, что вы контролируете ситуацию, и выдает сертификат.




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