Certificados caducados de Kubernetes Cert-Manager

Certificados caducados de Kubernetes Cert-Manager

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-tlsel 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-issuertipo en tu definición de Ingress:

Annotations:                 certmanager.k8s.io/cluster-issuer: letsencrypt-dns

Pero el objeto que has definido es un Certificatetipo:

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 ClusterIssuerarchivo 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

información relacionada