---
title: "Аддон cert-manager для Kubernetes"
description: "Аддон cert-manager для Kubernetes. Установка, настройка, примеры использования. Документация и инструкции по работе с облачными сервисами Timeweb Cloud."
---

# cert-manager

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

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

## Установка

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

![Selection 173](https://content.timeweb.com/assets/460b0f5d-e883-4746-a303-67b18e847ca8.png?width=1004&height=942)

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

![Selection 174](https://content.timeweb.com/assets/3a3ba9d8-c08f-4934-b1ae-48808687154f.png?width=1005&height=787)

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

```shell
kubectl get pods -n cert-manager
```

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

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

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

```yml
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:

```yml
solvers:
  - http01:
      ingress:
        class: traefik
```

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

Рассмотрим использование cert-manager на примере ресурсов, описанных в статье про [Nginx Ingress](https://timeweb.cloud/docs/k8s/addons/nginx-ingress).

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

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

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

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

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

```yml
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
```

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

```shell
kubectl apply -f cluster-issuer.yaml
```

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

```yml
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`, где они будут храниться.
    

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

```shell
kubectl apply -f ingress.yaml
```

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

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

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

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

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

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