Heredé un entorno de GKE Kubernetes y he estado intentando resolver esto durante días, pero desafortunadamente no sé qué probar a continuación.
El clúster está configurado para utilizar cert-manager (instalado mediante helm) para aplicar certificados Let's Encrypt al clúster. Por alguna razón, esto ha funcionado perfectamente durante más de dos años, pero a partir del 16 de abril comencé a ver advertencias de SSL en los navegadores para todas las notas del clúster.
Cuando ejecuto, kubectl describe certificates site-cloud-tls
el certificado parece haberse renovado pero no se aplica al tráfico de entrada.
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>
Tenemos un entorno de puesta en escena que también se vio afectado. Intenté reinstalar cert-manager, reinstalar nginx-ingress pero desafortunadamente no pude hacer que todo volviera a funcionar (probablemente debido a un error de configuración que cometí).
Después de 3 días, no sé qué camino seguir y no conozco Kubernetes lo suficiente como para saber qué probar a continuación. ¿Alguna orientación? ¿Puedo proporcionar alguna información adicional que pueda ayudar?
¡Gracias!
Respuesta1
El problema aquí es que te refieres a un cluster-issuer
tipo en tu definición de Ingress:
Annotations: certmanager.k8s.io/cluster-issuer: letsencrypt-dns
Pero el objeto que has definido es un Certificate
tipo:
Name: site-cloud-tls
Namespace: cs
Labels: <none>
Annotations: <none>
API Version: certmanager.k8s.io/v1alpha1
Kind: Certificate
Por eso no se aplica al Ingress. Lo que necesitas es crear unEditorrecurso en Kubernetes para manejar el certificado. Aquí puedes encontrar un ejemplo de un básico.CUMBRE ClusterIssuer
archivo de manifiesto:
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: [email protected]
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