Задать вопрос
@TheDigitalMadness
Программист

Почему не получается выдать сертификаты cert manager?

Уже весь день пытаюсь выдать сертификаты. У меня домен на рег.ру , все записи настроены на внешний адрес кластера, который выдал мне metallb.

Я установил cert-manager через helm . Устанавливал командами:

root@tourshop:~# helm repo add jetstack https://charts.jetstack.io
helm repo update

root@tourshop:~# kubectl create namespace cert-manager

root@tourshop:~# helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --version v1.14.4 \
  --set installCRDs=true


Далее применяю cluster-issuer.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email: тутМояПочта
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - http01:
        ingress:
          class: nginx


Затем для получения сертификатов я сделал ingress (в кластере установлен ingress-nginx):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: tourshop-ingress
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  ingressClassName: nginx
  rules:
  - host: tourshop.online
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: tourshop-service
            port:
              number: 80
  tls:
  - hosts:
    - tourshop.online
    secretName: tourshop-online-tls


и под для него:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tourshop-test
  labels:
    app: tourshop-test
spec:
  replicas: 2
  selector:
    matchLabels:
      app: tourshop-test
  template:
    metadata:
      labels:
        app: tourshop-test
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: tourshop-service
spec:
  selector:
    app: tourshop-test
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80


Применяю под, затем ингресс.

Начинается процесс получения сертификатов. Тут я себе выделил 3 консольки для мониторинга:
1)
root@tourshop:~# watch -n 2 "echo '=== CERTIFICATE ===' && kubectl get certificate && echo '=== ORDER ===' && kubectl get order && echo '=== CHALLENGE ===' && kubectl get challenge"

2)
root@tourshop:~# watch -n 2 "kubectl get ingress"
3)
root@tourshop:~# kubectl logs -n ingress-nginx deployment/ingress-nginx-controller --tail=50


Вот что происходит сначала:
1)
Every 2.0s: echo '=== CERTIFICATE ===' && kubectl...  tourshop.control-plane: Thu Nov  6 18:53:50 2025

=== CERTIFICATE ===
NAME                  READY   SECRET                AGE
tourshop-online-tls   False   tourshop-online-tls   13s
=== ORDER ===
NAME                             STATE     AGE
tourshop-online-tls-1-69669887   pending   13s
=== CHALLENGE ===
NAME                                        STATE     DOMAIN            AGE
tourshop-online-tls-1-69669887-1230061389   pending   tourshop.online   11s

2)
Every 2.0s: kubectl get ingress                      tourshop.control-plane: Thu Nov  6 18:54:04 2025

NAME                        CLASS    HOSTS             ADDRESS          PORTS     AGE
cm-acme-http-solver-xzxw9   <none>   tourshop.online                    80        25s
tourshop-ingress            nginx    tourshop.online   141.105.71.240   80, 443   27s


потихонечку ingress-ы ждут айпи адреса

Затем:
2)
Every 2.0s: kubectl get ingress                      tourshop.control-plane: Thu Nov  6 18:54:43 2025

NAME                        CLASS    HOSTS             ADDRESS          PORTS     AGE
cm-acme-http-solver-xzxw9   <none>   tourshop.online   141.105.71.240   80        64s
tourshop-ingress            nginx    tourshop.online   141.105.71.240   80, 443   66s

получили адреса.

Затем в какой-то момент:
1) переходят в invalid
Every 2.0s: echo '=== CERTIFICATE ===' && kubectl...  tourshop.control-plane: Thu Nov  6 19:00:31 2025

=== CERTIFICATE ===
NAME                  READY   SECRET                AGE
tourshop-online-tls   False   tourshop-online-tls   6m54s
=== ORDER ===
NAME                             STATE     AGE
tourshop-online-tls-1-69669887   invalid   6m54s
=== CHALLENGE ===
NAME                                        STATE     DOMAIN            AGE
tourshop-online-tls-1-69669887-1230061389   invalid   tourshop.online   6m52s


2) Солвер помирает
Every 2.0s: kubectl get ingress                      tourshop.control-plane: Thu Nov  6 19:01:07 2025

NAME               CLASS   HOSTS             ADDRESS          PORTS     AGE
tourshop-ingress   nginx   tourshop.online   141.105.71.240   80, 443   7m30s


Вот полный лог ingress-controller с момента запуска:
3)
https://drive.google.com/file/d/1BtLUEnw9YORsZS1R-...

Я не понимаю, почему у меня не получается выдать сейчас сертификаты: раньше с такой проблемой не сталкивался, везде нормально выдавало. Я буду очень благодарен любому содействию. Весь день читаю от советов нейросетки до n-ой страницы в браузере - не понимаю. Если понадобятся еще какие-то данные - напишите, я скину
  • Вопрос задан
  • 31 просмотр
Подписаться 1 Средний 3 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик с нуля
    6 месяцев
    Далее
  • Skillfactory
    DevOps-инженер
    6 месяцев
    Далее
  • SF Education
    Бэкенд-разработчик на Python
    3 месяца
    Далее
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы