EKS - Which load balancer backend protocol to use?

Summary

I get Bad protocol version identification in gitlab-shell logs and I can't clone using SSH.

Configuration used

I deployed the chart using classic load balancer (ELB) with following config:

global:
  hosts:
    domain: mydomain.com
  ingress:
    configureCertmanager: false
nginx-ingress:
  controller:
    service:
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-ssl-cert: xxx
        service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "https"

I tried to change nginx-ingress annotations but I can access webapp only with service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "https", otherwise I get:
400 Bad Request - The plain HTTP request was sent to HTTPS port

BTW, it would be great to add a section about AWS ingress config (with certificate info) in chart documentation... It would be very helpful :-)

Versions

  • Chart: 4.4.3
  • Platform:
    • Cloud: EKS
  • Kubernetes:
    • Client: 1.19.2
    • Server: 1.17.9
  • Helm:
    • Server: 3.3.4

Relevant logs

> kubectl logs gitlab-gitlab-shell-7588b8cf64-zjl4n

+ /scripts/set-config /etc/gitlab-shell /srv/gitlab-shell
Begin parsing .erb files from /etc/gitlab-shell
Writing /srv/gitlab-shell/config.yml
Copying other config files found in /etc/gitlab-shell
+ exec /bin/sh -c '"/scripts/process-wrapper"'
Using existing Host Keys
Starting OpenSSH
Tailing Logs
==> /var/log/gitlab-shell/gitlab-shell.log <==
==> /var/log/gitlab-shell/ssh.log <==
Server listening on 0.0.0.0 port 2222.
Server listening on :: port 2222.
Bad protocol version identification '\026\003\001' from 172.16.1.163 port 43956
Bad protocol version identification '\026\003\001' from 172.16.1.163 port 35924
Bad protocol version identification '\026\003\001' from 172.16.1.176 port 54962
Bad protocol version identification '\026\003\001' from 172.16.1.136 port 33522
Bad protocol version identification '\026\003\001' from 172.16.1.163 port 35982
> kubectl describe svc gitlab-gitlab-shell

Name:              gitlab-gitlab-shell
Namespace:         default
Labels:            app=gitlab-shell
                   app.kubernetes.io/managed-by=Helm
                   chart=gitlab-shell-4.4.3
                   heritage=Helm
                   release=gitlab
Annotations:       meta.helm.sh/release-name: gitlab
                   meta.helm.sh/release-namespace: default
Selector:          app=gitlab-shell,release=gitlab
Type:              ClusterIP
IP:                10.100.61.19
Port:              ssh  22/TCP
TargetPort:        2222/TCP
Endpoints:         172.16.1.104:2222,172.16.1.137:2222
Session Affinity:  None
Events:            <none>
> kubectl describe svc gitlab-nginx-ingress-controller

Name:                     gitlab-nginx-ingress-controller
Namespace:                default
Labels:                   app=nginx-ingress
                          app.kubernetes.io/managed-by=Helm
                          chart=nginx-ingress-0.30.0-1
                          component=controller
                          heritage=Helm
                          release=gitlab
Annotations:              field.cattle.io/publicEndpoints:
                            [{"addresses":["xxx.elb.amazonaws.com"],"port":80,"protocol":"TCP","serviceName":"def...
                          meta.helm.sh/release-name: gitlab
                          meta.helm.sh/release-namespace: default
                          service.beta.kubernetes.io/aws-load-balancer-backend-protocol: https
                          service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:xxx
Selector:                 app=nginx-ingress,component=controller,release=gitlab
Type:                     LoadBalancer
IP:                       10.100.64.39
LoadBalancer Ingress:     xxx.elb.amazonaws.com
Port:                     http  80/TCP
TargetPort:               http/TCP
NodePort:                 http  30778/TCP
Endpoints:                172.16.1.136:80,172.16.1.163:80,172.16.1.176:80
Port:                     https  443/TCP
TargetPort:               https/TCP
NodePort:                 https  31355/TCP
Endpoints:                172.16.1.136:443,172.16.1.163:443,172.16.1.176:443
Port:                     gitlab-shell  22/TCP
TargetPort:               gitlab-shell/TCP
NodePort:                 gitlab-shell  31304/TCP
Endpoints:                172.16.1.136:22,172.16.1.163:22,172.16.1.176:22
Session Affinity:         None
External Traffic Policy:  Local
HealthCheck NodePort:     32059
Events:
  Type    Reason                Age                  From                Message
  ----    ------                ----                 ----                -------
  Normal  EnsuringLoadBalancer  8m16s (x8 over 25h)  service-controller  Ensuring load balancer
  Normal  EnsuredLoadBalancer   8m15s (x8 over 25h)  service-controller  Ensured load balancer
> kubectl describe ingress gitlab-webservice

Name:             gitlab-webservice
Namespace:        default
Address:          xxx.elb.amazonaws.com
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
TLS:
  gitlab-wildcard-tls terminates gitlab.mydomain.com
Rules:
  Host                    Path  Backends
  ----                    ----  --------
  gitlab.mydomain.com  
                          /                gitlab-webservice:8181 (172.16.1.165:8181,172.16.1.181:8181)
                          /admin/sidekiq   gitlab-webservice:8080 (172.16.1.165:8080,172.16.1.181:8080)
Annotations:              field.cattle.io/publicEndpoints:
                            [{"addresses":[""],"port":443,"protocol":"HTTPS","serviceName":"default:gitlab-webservice","ingressName":"default:gitlab-webservice","host...
                          kubernetes.io/ingress.class: gitlab-nginx
                          kubernetes.io/ingress.provider: nginx
                          meta.helm.sh/release-name: gitlab
                          meta.helm.sh/release-namespace: default
                          nginx.ingress.kubernetes.io/proxy-body-size: 512m
                          nginx.ingress.kubernetes.io/proxy-connect-timeout: 15
                          nginx.ingress.kubernetes.io/proxy-read-timeout: 600
Events:
  Type    Reason  Age                From                      Message
  ----    ------  ----               ----                      -------
  Normal  UPDATE  53m (x9 over 25h)  nginx-ingress-controller  Ingress default/gitlab-webservice
  Normal  UPDATE  53m (x9 over 25h)  nginx-ingress-controller  Ingress default/gitlab-webservice
  Normal  UPDATE  53m (x9 over 25h)  nginx-ingress-controller  Ingress default/gitlab-webservice
Edited by Cedric Thiebault