skip to Main Content

I am trying to expose ArgoCD using ingress and cert-manager in GKE cluster(version 1.21.5-gke.1302) but the certificate is not issued.

Steps to reproduce:

  • Install cert-manager applying this yaml

  • Install nginx ingress-controller with helm running:
    helm install my-release nginx-stable/nginx-ingress

  • Create clusterIssuer applying the following:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-cluster-issuer
spec:
  acme:
    email: [email protected]
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-cluster-issuer-key
    solvers:
    - http01:
       ingress:
         class: nginx
  • Applied ingress using this guide and the file:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: argocd-server-ingress
  namespace: argocd
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    # If you encounter a redirect loop or are getting a 307 response code 
    # then you need to force the nginx ingress to connect to the backend using HTTPS.
    #
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
  rules:
  - host: argocd.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service: 
            name: argocd-server
            port:
              name: https
  tls:
  - hosts:
    - argocd.example.com
    secretName: argocd-secret # do not change, this is provided by Argo CD
  • Map the ip of ingress-controller to your host name.

Expected behaviour: I was expecting a certificate to be created successfully and have access to the app.

Current status:

Certificate describe gives me this:

  Conditions:
    Last Transition Time:        2022-01-18T14:10:14Z
    Message:                     Existing issued Secret is not up to date for spec: [spec.dnsNames]
    Observed Generation:         3
    Reason:                      SecretMismatch
    Status:                      False
    Type:                        Ready
    Last Transition Time:        2022-01-18T14:10:14Z
    Message:                     Issuing certificate as Secret was previously issued by Issuer.cert-manager.io/
    Observed Generation:         1
    Reason:                      IncorrectIssuer
    Status:                      True
    Type:                        Issuing
  Next Private Key Secret Name:  argocd-secret-ccjtv
  Not After:                     2023-01-18T13:39:24Z
  Not Before:                    2022-01-18T13:39:24Z
  Renewal Time:                  2022-09-18T21:39:24Z
Events:
  Type    Reason     Age                  From          Message
  ----    ------     ----                 ----          -------
  Normal  Requested  16m                  cert-manager  Created new CertificateRequest resource "argocd-secret-qm469"
  Normal  Requested  15m                  cert-manager  Created new CertificateRequest resource "argocd-secret-9ctn4"
  Normal  Reused     7m19s (x2 over 45h)  cert-manager  Reusing private key stored in existing Secret resource "argocd-secret"

Finally I can access the provided url by the challenge but status is pending with reason:
Waiting for HTTP-01 challenge propagation: failed to perform self check GET request

Does anyone have any idea what might be wrong? It would be highly appreciated.

Thanks!

2

Answers


  1. I think you need to specify:

    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: letsencrypt-cluster-issuer
    spec:
      acme:
        email: [email protected]
        server: https://acme-v02.api.letsencrypt.org/directory
        privateKeySecretRef:
          name: argocd-secret # HERE use secrets created by ArgoCD
        solvers:
        - http01:
           ingress:
             class: nginx
    
    Login or Signup to reply.
  2. Looks like you have a different name for cluster issue in your ingress rule for ArgoCD.
    From your example in the ClusterIssuer manifest:

    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: letsencrypt-cluster-issuer
    

    And from ingress rule

      annotations:
        cert-manager.io/cluster-issuer: letsencrypt-prod
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search