Уже весь день пытаюсь выдать сертификаты. У меня домен на рег.ру , все записи настроены на внешний адрес кластера, который выдал мне 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-ой страницы в браузере - не понимаю. Если понадобятся еще какие-то данные - напишите, я скину