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

# cert-manager Webhook

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

cert-manager Webhook используется для автоматического создания DNS-записей при валидации домена с помощью метода DNS-01.

Для корректной работы дополнения необходимо, чтобы:

-   домен делегированы [на наши NS](https://timeweb.cloud/docs/domains/dns-records-management#ns-servery);
-   в кластере установлен [cert-manager.](https://timeweb.cloud/docs/k8s/addons/cert-manager)

## Установка cert-manager Webhook

Установите дополнение cert-manager Webhook через панель управления Kubernetes в разделе «Дополнения». 

![Selection 283](https://content.timeweb.com/assets/821186e5-8b5a-4f02-80df-a8f0046c71b7.png?width=1038&height=950)

После установки убедитесь, что запущен под, отвечающий за DNS01-валидацию:

```shell
kubectl get pods -n cert-manager -l app=cert-manager-webhook-timeweb-cloud
```

У пода должен быть статус `Running`.

## Настройка ClusterIssuer

Чтобы cert-manager мог выпускать сертификаты, необходимо создать объект `ClusterIssuer`. Он описывает, каким способом и через какого провайдера cert-manager будет выполнять валидацию доменов и получать сертификаты. Объект `ClusterIssuer` действует на уровне всего кластера и может использоваться из любых namespace'ов.

Создайте файл `cluster-issuer.yaml`:

```yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-dns
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: email@example.com  # Укажите вашу почту
    privateKeySecretRef:
      name: letsencrypt-dns-account-key
    solvers:
    - dns01:
        webhook:
          groupName: twcloud-<ID_кластера>  # Укажите ID вашего кластера
          solverName: twcloud-dns
```

Значение `privateKeySecretRef` указывает, где будет храниться ключ учетной записи, с помощью которой cert-manager взаимодействует с Let's Encrypt.

Параметр `groupName` обязательно должен содержать ID вашего кластера. Его можно посмотреть в адресной строке браузера при открытии страницы управления кластером.

![Selection 284](https://content.timeweb.com/assets/7f13f3b4-db29-4948-92fe-addfcfb1fef4.png?width=1265&height=1000)

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

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

## Выпуск сертификата

Создайте файл `certificate.yaml`:

```yaml
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: example-com-tls
  namespace: default
spec:
  secretName: example-com-tls
  issuerRef:
    name: letsencrypt-dns
    kind: ClusterIssuer
  dnsNames:
    - example.com
    - www.example.com
```

При использовании wildcard-домена обязательно заключайте его в кавычки:

```yaml
   dnsNames:
    - "*.example.com"
```

Для корректной работы сертификат должен находиться в том же неймспейсе, что и Ingress.  
Проверьте, что в манифесте указан нужный неймспейс.

Замените домены на свои и примените манифест:

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

## Проверка статуса

Проверить текущий статус выпуска сертификата можно так:

```shell
kubectl get certificaterequests,orders,challenges -n default
```

При успешном выпуске сертификата вы увидите примерно следующее:

```shell
NAME                                                   APPROVED   DENIED   READY   ISSUER            REQUESTER                                         AGE
certificaterequest.cert-manager.io/example-com-tls-1   True                True    letsencrypt-dns   system:serviceaccount:cert-manager:cert-manager   91s

NAME                                                      STATE   AGE
order.acme.cert-manager.io/example-com-tls-1-1905819700   valid   91s
```

## Проверка сертификата

После успешного выпуска проверьте, что секрет с сертификатом создан:

```shell
kubectl get secret example-com-tls -n default -o yaml
```

Секрет будет содержать ключи `tls.crt` и `tls.key`.
