3 min read | by Jordi Prats
When enabling an Ingress for ArgoCD we might end up with a redirect loop: ArgoCD keeps redirecting to the main page using https, even tough it is already using https:
$ curl -I https://argocd.pet2cattle.com/ HTTP/2 307 date: Wed, 23 Mar 2022 22:38:31 GMT content-type: text/html; charset=utf-8 location: https://argocd.pet2cattle.com/
This issue happens because, by default, ArgoCD expects to handle the TLS termination by itself, always redirecting HTTP requests to HTTPS. If we try to offload the TLS termination to the ingress controller, from ArgoCD's perspective the connection is HTTP, so it keeps redirecting to HTTPS
This would be the helm values for configuring an Ingress that uses the ALB ingress controller, causing this redirect loop:
server: ingress: enabled: true annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}' alb.ingress.kubernetes.io/scheme: internal alb.ingress.kubernetes.io/target-type: ip alb.ingress.kubernetes.io/group.name: argocd alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80},{"HTTPS":443}]' hosts: - "argocd.pet2cattle.com"
We have two options:
For the fist option, disable the HTTPS redirect, we will have to add the --insecure flag to server.extraArgs:
server: extraArgs: - --insecure
On the other hand, to enable to use HTTPS behind the scenes (aka between the ALB and ArgoCD), we will have to tell we will need to set server.ingress.https to true and then add the alb.ingress.kubernetes.io/backend-protocol annotation to tell the ALB to use https instead of http. On the helm values it would look like this:
server: ingress: enabled: true https: true annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}' alb.ingress.kubernetes.io/scheme: internal alb.ingress.kubernetes.io/target-type: ip alb.ingress.kubernetes.io/group.name: argocd alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80},{"HTTPS":443}]' alb.ingress.kubernetes.io/backend-protocol: HTTPS hosts: - "argocd.pet2cattle.com"
Either way, once these changes are applied, we will be able to access ArgoCD:
$ curl -I https://argocd.pet2cattle.com/ HTTP/2 200 date: Wed, 23 Mar 2022 22:49:37 GMT content-type: text/html; charset=utf-8 content-length: 843 accept-ranges: bytes x-frame-options: sameorigin x-xss-protection: 1
Posted on 24/03/2022