Просроченные сертификаты Kubernetes Cert-Manager
Я унаследовал среду GKE Kubernetes и уже несколько дней пытаюсь разобраться в этом, но, к сожалению, просто не знаю, что попробовать дальше.
Кластер настроен на использование cert-manager (устанавливается через helm) для применения сертификатов Let's Encrypt к кластеру. По какой-то причине это отлично работало более двух лет, но начиная с 16 апреля я начал видеть предупреждения SSL в браузерах для всех заметок в кластере.
Когда я бегу
Name: site-cloud-tls
Namespace: cs
Labels: <none>
Annotations: <none>
API Version: certmanager.k8s.io/v1alpha1
Kind: Certificate
Metadata:
Creation Timestamp: 2019-06-02T09:55:05Z
Generation: 34
Owner References:
API Version: extensions/v1beta1
Block Owner Deletion: true
Controller: true
Kind: Ingress
Name: cs-nginx
UID: 7f312326-851c-11e9-8bf0-4201ac10000c
Resource Version: 541365011
UID: 7f36cc40-851c-11e9-8bf0-4201ac10000c
Spec:
Dns Names:
site.cloud (changed name but is correct)
Issuer Ref:
Kind: ClusterIssuer
Name: letsencrypt-dns
Secret Name: site-cloud-tls
Status:
Conditions:
Last Transition Time: 2022-04-24T05:26:13Z
Message: Certificate is up to date and has not expired
Reason: Ready
Status: True
Type: Ready
Not After: 2022-06-15T17:01:48Z
Events: <none>
kubectl describe ingress
Name: cs-nginx
Namespace: cs
Address: 192.168.1.32
Default backend: default-http-backend:80 (10.16.3.12:8080)
TLS:
site-cloud-tls terminates site.cloud (changed naming but seems correct)
Rules:
Host Path Backends
---- ---- --------
site.cloud
/ site:8080 (10.10.10.10:8080)
Annotations: certmanager.k8s.io/cluster-issuer: letsencrypt-dns
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: true
nginx.org/websocket-services: datahub
Events: <none>
У нас есть промежуточная среда, которая также пострадала. Я попытался переустановить диспетчер сертификатов, переустановить nginx-ingress, но, к сожалению, мне не удалось восстановить работу (вероятно, из-за допущенной мной ошибки конфигурации).
Спустя 3 дня я не знаю, в каком направлении идти дальше, и недостаточно хорошо знаю Kubernetes, чтобы знать, что попробовать дальше. Любое руководство? Могу ли я предоставить дополнительную информацию, которая может помочь?
Спасибо!
1 ответ
Проблема здесь в том, что вы имеете в видуcluster-issuer
введите в вашем определении Ingress:
Annotations: certmanager.k8s.io/cluster-issuer: letsencrypt-dns
Но объект, который вы определили, являетсяCertificate
добрый:
Name: site-cloud-tls
Namespace: cs
Labels: <none>
Annotations: <none>
API Version: certmanager.k8s.io/v1alpha1
Kind: Certificate
Вот почему он не применяется к Ingress. Вам нужно создать ресурс Issuer в Kubernetes для обработки сертификата. Здесь вы можете найти пример базового ACME . ClusterIssuer
файл манифеста:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
spec:
acme:
# You must replace this email address with your own.
# Let's Encrypt will use this to contact you about expiring
# certificates, and issues related to your account.
email: user@example.com
server: https://acme-staging-v02.api.letsencrypt.org/directory
privateKeySecretRef:
# Secret resource that will be used to store the account's private key.
name: example-issuer-account-key
# Add a single challenge solver, HTTP01 using nginx
solvers:
- http01:
ingress:
class: nginx