VK Cloud logo
Обновлена 15 апреля 2024 г. в 08:50

Работа с cert-manager с помощью Helm 3

С помощью инструмента cert-manager можно управлять сертификатами в кластерах Kubernetes:

  • Выпускать сертификаты, в том числе самоподписанные (self-signed), путем отправки запросов к источникам, которые выступают в роли центра сертификации (certificate authority, CA).

    Примеры источников:

    • провайдеры решений по кибербезопасности, такие как Venafi;
    • провайдеры сертификатов, такие как Let’s Encrypt;
    • хранилища секретов, такие как HashiCorp Vault;
    • локальные контейнеры, содержащие внутри себя публичную часть сертификата и приватный ключ.
  • Автоматически перевыпускать сертификаты с истекающим сроком действия.

Выпущенный с помощью cert-manager сертификат будет доступен другим ресурсам Kubernetes. Например, его можно использовать для Ingress.

Далее будет показано, как с помощью Helm 3 выполняются установка и обновление cert-manager в кластерах Kubernetes. Также будет выпущен самоподписанный сертификат для проверки работоспособности cert-manager.

Подготовительные шаги

  1. Если у вас еще нет кластера Kubernetes, создайте его.

  2. Определите версию кластера.

  3. На хосте, с которого планируется подключаться к кластеру, установите kubectl, если утилита еще не установлена.

    Выберите для установки версию kubectl, которая совместима с кластером.

  4. Убедитесь, что вы можете подключиться к кластеру с помощью kubectl.

  5. На хосте, с которого планируется подключаться к кластеру, установите Helm версии 3.0.0 или выше, если утилита еще не установлена.

    Выберите для установки версию Helm, которая совместима с кластером.

1. Добавьте репозиторий и выберите версию для установки

  1. Добавьте репозиторий cert-manager:

    helm repo add jetstack https://charts.jetstack.io
  2. Обновите кеш чартов (charts):

    helm repo update
  3. Получите список доступных чартов cert-manager и их версий:

    helm search repo jetstack -l
  4. Выберите версию cert-manager, которую нужно установить в кластер.

    Таблица совместимости версий cert-manager и Kubernetes приведена в официальной документации cert-manager.

2. Установите cert-manager

  1. Установите Custom Resource Definitions (CRDs), необходимые для работы cert-manager.

    Установка CRDs будет выполнена вручную с помощью kubectl. Рекомендуется использовать этот метод, поскольку он наиболее безопасный.

    Выполните команду:

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.3/cert-manager.crds.yaml
  2. Установите выбранную версию cert-manager.

    Эта команда установит релиз с именем cert-manager указанной версии в пространство имен (namespace) cert-manager. Если такого пространства в кластере не существует, то оно будет создано автоматически.

    helm install cert-manager jetstack/cert-manager \  --version v1.11.3 \  --namespace cert-manager \  --create-namespace

    При успешном завершении установки в сообщении от Helm будет выведено:

    • STATUS: deployed;
    • NOTES: cert-manager v1.11.3 has been deployed successfully!.

3. Проверьте работоспособность cert-manager

  1. Проверьте, что в пространстве имен cert-manager были успешно созданы необходимые поды, и что они находятся в состоянии Running:

    kubectl get pods -n cert-manager
  2. В тестовых целях выпустите самоподписанный сертификат:

    1. Создайте файл манифеста:

      В этом манифесте описаны:

      • пространство имен cert-manager-test, в которое будут помещены ресурсы Issuer и Certificate;
      • ресурс Issuer, который отвечает за выпуск самоподписанных сертификатов;
      • ресурс Certificate с параметрами самоподписанного сертификата.
    2. Примените файл манифеста.

      kubectl apply -f cert-manager-test-resources.yaml

      Будут созданы описанные в манифесте ресурсы. Также cert-manager автоматически создаст другие необходимые ресурсы.

    3. Проверьте, что были созданы все необходимые ресурсы:

      kubectl get issuers,clusterissuers,certificates,certificaterequests,orders,challenges,secrets -n cert-manager-test

      В выводе должны присутствовать:

      • Issuer и Certificate, конфигурация которых описана в манифесте, в статусе READY: True;
      • CertificateRequest в статусе READY: True;
      • Secret, содержащий в себе данные сертификата.
    4. Проверьте статус сертификата:

      kubectl describe certificate selfsigned-cert -n cert-manager-test

      В случае успешного выпуска сертификата:

      • Информация о статусе (Status) будет содержать строку Certificate is up to date and has not expired.
      • В списке событий (Events) будет событие c сообщением The certificate has been successfully issued.

    Если сертификат был выпущен успешно, то cert-manager корректно установлен и работает.

4. (Опционально) Создайте резервную копию ресурсов cert-manager

Будет создана резервная копия ресурсов Issuer, ClusterIssuer и Certificate. В нее не входят:

  • Ресурсы CertificateRequests. Не рекомендуется включать такие ресурсы в резервную копию, поскольку это может усложнить восстановление из резервной копии.

  • Секреты, которые непосредственно хранят в себе данные сертификатов и в том числе содержат приватный ключ.

Чтобы создать резервную копию, выполните команду:

kubectl get -o yaml \  --all-namespaces \  issuer,clusterissuer,certificate \> cert-manager-backup.yaml

О продвинутом резервном копировании и восстановлении из резервной копии читайте в официальной документации cert-manager.

5. Обновите cert-manager

  1. Посмотрите версию установленного релиза cert-manager:

    helm list --namespace cert-manager
  2. Обновите кеш чартов:

    helm repo update
  3. Получите список доступных чартов cert-manager и их версий:

    helm search repo jetstack -l
  4. Изучите официальную документацию cert-manager, посвященную обновлению. Она содержит рекомендации по обновлению, список критичных изменений (breaking changes) и другую полезную информацию.

    В частности рекомендуется обновляться на одну минорную версию за раз (например, 1.11.3 → 1.12.3).

  5. Выберите версию, на которую нужно обновиться.

    Таблица совместимости версий cert-manager и Kubernetes приведена в официальной документации cert-manager.

  6. Обновите установленные в кластере CRDs.

    Поскольку ранее эти CRDs были установлены вручную, обновите их также вручную перед обновлением самого cert-manager.

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.3/cert-manager.crds.yaml
  7. Обновите релиз cert-manager до выбранной версии:

    helm upgrade cert-manager jetstack/cert-manager \  --version v1.12.3 \  --namespace cert-manager

    При успешном завершении обновления в сообщении от Helm будет выведено:

    • Release "cert-manager" has been upgraded. Happy Helming!;
    • STATUS: deployed;
    • NOTES: cert-manager v1.12.3 has been deployed successfully!.

Удалите неиспользуемые ресурсы

  1. Если ресурсы Kubernetes, созданные для проверки работоспособности cert-manager, были созданы в тестовых целях и больше вам не нужны, удалите их:

    kubectl delete -f cert-manager-test-resources.yaml
  2. Если cert-manager был установлен в тестовых целях и больше вам не нужен, удалите все связанные с ним ресурсы:

    1. Убедитесь, что в кластере больше нет ресурсов, созданных cert-manager:

      kubectl get issuers,clusterissuers,certificates,certificaterequests,orders,challenges --all-namespaces

      Если такие ресурсы есть — удалите их.

    2. Удалите релиз cert-manager:

      helm delete cert-manager --namespace cert-manager
    3. Удалите пространство имен cert-manager:

      kubectl delete ns cert-manager
    4. Удалите установленные в кластер CRDs для cert-manager:

      kubectl delete -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.3/cert-manager.crds.yaml