<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Публичное облако на базе VMware с управлением через vCloud Director
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

cert-manager

cert-manager — это расширение для Kubernetes, которое автоматизирует выпуск и обновление сертификатов. Оно позволяет выпускать сертификаты от Let's Encrypt и других центров сертификации, а также использовать внутренние корневые сертификаты. cert-manager упрощает работу с сертификатами, автоматически продлевая их перед истечением срока действия и обеспечивая безопасное шифрование для сервисов в кластере. Он интегрируется с Ingress-контроллерами и поддерживает различные механизмы проверки домена. Это делает его удобным инструментом для автоматизации управления сертификатами в Kubernetes.

Установка

Для установки cert-manager откройте панель управления кластером, перейдите во вкладку «Дополнения» и выберите cert-manager.

Selection 173

В открывшемся мастере установки нажмите кнопку «Установить» и дождитесь завершения процесса.

Selection 174

Проверить корректность установки можно командой:

kubectl get pods -n cert-manager

Все поды в неймспейсе cert-manager должны иметь статус «Running».

Использование

Чтобы cert-manager мог выпускать сертификаты, необходимо создать объект ClusterIssuer, который будет управлять сертификатами на уровне всего кластера. Пример манифеста:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    email: email@example.com
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - http01:
        ingress:
          class: nginx

Здесь:

  • email — ваша почта. Она необходима для создания сертификатов, на нее будут приходить уведомления от Let's Encrypt.

  • server — адрес Let's Encrypt или другого центра сертификации.

  • privateKeySecretRef — секрет, в котором хранится закрытый ключ.

  • solvers.http01.ingress.class — метод подтверждения владения доменом через HTTP, в данном случае с использованием Ingress-контроллера nginx.

Если вы используете другой Ingress-контроллер, необходимо заменить nginx на нужное значение, например, для Traefik:

solvers:
  - http01:
      ingress:
        class: traefik

Пример использования cert-manager

Рассмотрим использование cert-manager на примере ресурсов, описанных в статье про Nginx Ingress.

Если вы следовали той инструкции, у вас уже настроены:

  • 3 деплоймента
  • Nginx Ingress
  • LoadBalancer

Сервисы доступны по:

  • http://ingress1.example.com/service1
  • http://ingress1.example.com/service2
  • http://ingress2.example.com/

Теперь опишем ClusterIssuer в файле cluster-issuer.yaml:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    email: email@example.com
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - http01:
        ingress:
          class: nginx

Применим манифест:

kubectl apply -f cluster-issuer.yaml

Далее необходимо обновить манифест Ingress, добавив аннотацию для использования cert-manager и секцию tls. Обновленный ingress.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  namespace: ingress-example
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  rules:
  - host: ingress1.example.com
    http:
      paths:
      - path: /service1
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80
      - path: /service2
        pathType: Prefix
        backend:
          service:
            name: service2
            port:
              number: 80
  tls:
  - hosts:
    - ingress1.example.com
    secretName: ingress-tls

Изменения:

  • Добавлена аннотация cert-manager.io/cluster-issuer: letsencrypt-prod, указывающая cert-manager использовать созданный ClusterIssuer.

  • Добавлена секция tls, в которой указаны домены, для которых cert-manager должен выпустить сертификаты, и секрет ingress-tls, где они будут храниться.

Применяем обновленный манифест:

kubectl apply -f ingress.yaml

Через некоторое время cert-manager выпустит сертификаты и сохранит их в секрете ingress-tls. Проверить наличие сертификатов можно командой:

kubectl get secret ingress-tls -n ingress-example -o yaml

Если все прошло успешно, в секрете должны появиться tls.crt и tls.key.

Теперь можно проверить работу HTTPS:

curl -v https://ingress1.example.com/service1

Если запрос проходит без ошибок, значит, сертификаты успешно установлены, и сервисы работают по HTTPS.

Была ли статья полезна?
Ваша оценка очень важна
Пока нет комментариев