Gitlab not working with External NLB
Summary
I am unable to use a dedicated ingress-nginx to setup AWS NLB as the LB for gitlab with SSL re-direction from NGINX.
I was however able to use the shared nginx-ingress by simply having this config for global.ingress.annotations set to
external-dns.alpha.kubernetes.io/target: ingress-class.domain.com
However, I intend to use a dedicated NLB for gitlab for the following reasons:
- I need SSH port exposed for git alone
-
git.domain.comcannot be host-forwarded via ingress for SSH based connections with a shared ingress provider
Steps to reproduce
helm install gitlab/gitlab -f ./values.yaml
Configuration used
values.yaml
global:
hosts:
https: false
domain: domain.com
gitlab:
name: git.domain.com
registry:
name: registry.domain.com
ingress:
configureCertmanager: false
annotations:
external-dns.alpha.kubernetes.io/target: git.domain.com
tls:
enabled: false
psql:
host: infra-gitlab-rds.domain.com
password:
key: gitlabPassword
secret: gitlab-rds-secret
minio:
enabled: false
grafana:
enabled: false
appConfig:
artifacts:
bucket: gitlab-artifacts
lfs:
bucket: gitlab-lfs
packages:
bucket: gitlab-packages
uploads:
bucket: gitlab-uploads
externalDiffs:
bucket: gitlab-external-diffs
terraformState:
bucket: gitlab-terraform-state
dependencyProxy:
bucket: gitlab-dependency-proxy
object_store:
enabled: true
proxy_download: true
connection:
secret: gitlab-object-store
key: connection.yaml
storage_options:
server_side_encryption: aws:kms
server_side_encryption_kms_key_id: "XXXXXXXXXXXXXXXXXX"
serviceAccount:
enabled: true
create: true
annotations:
eks.amazonaws.com/role-arn: XXXXXXXXXXXXXXXXXX
certmanager:
createCustomResource: false
install: false
nginx-ingress:
controller:
scope:
enabled: true
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- gitlab-nginx
- key: app.kubernetes.io/instance
operator: In
values:
- gitlab-nginx
- key: app.kubernetes.io/component
operator: In
values:
- controller
topologyKey: kubernetes.io/hostname
priorityClassName: "infra-apps"
service:
enableHttps: true
targetPorts:
https: http
annotations:
external-dns.alpha.kubernetes.io/hostname: git.domain.com
service.beta.kubernetes.io/aws-load-balancer-additional-resource-tags: Name=gitlab-nginx,class=nginx
service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: "*"
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: XXXXXXXXXXXXXXXXXX
service.beta.kubernetes.io/aws-load-balancer-ssl-negotiation-policy: XXXXXXXXXXXXXXXXXX
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "tcp"
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
config:
use-forwarded-headers: "true"
client-header-timeout: "420"
proxy-stream-timeout: "200s"
client-body-timeout: "420"
headers:
X-Forwarded-Ssl: "on"
stats:
enabled: true
metrics:
enabled: true
podSecurityPolicy:
enabled: true
serviceAccount:
create: true
prometheus:
install: false
postgresql:
install: false
gitlab-runner:
install: false
Current behavior
all requests to http://git.domain.com as well as https://git.domain.com are getting following reply:
curl: (52) Empty reply from server
this seems to be the case when an http request is being offered to the server expecting https request
Expected behavior
- http redirection to https://
curl -IL http://git.domain.com
HTTP/1.1 308 Permanent Redirect
Server: nginx/1.19.2
Date: Thu, 01 Oct 2020 06:53:30 GMT
Content-Type: text/html
Content-Length: 171
Connection: keep-alive
Location: https://git.domain.com/
HTTP/1.1 302 Found
Server: nginx/1.19.2
Date: Thu, 01 Oct 2020 06:53:30 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Cache-Control: no-cache
Content-Security-Policy-Report-Only: default-src 'self'; frame-src 'self' https://www.recaptcha.net/ https://content.googleapis.com https://content-compute.googleapis.com https://content-cloudbilling.googleapis.com https://content-cloudresourcemanager.googleapis.com; img-src * data: blob:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.recaptcha.net https://apis.google.com 'nonce-qLVrKVNr+2apfr4GKB5DSg=='; style-src 'self' 'unsafe-inline'
Location: http://git.domain.com/users/sign_in
Referrer-Policy: strict-origin-when-cross-origin
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Frame-Options: DENY
X-Permitted-Cross-Domain-Policies: none
X-Request-Id: PNRS3f83Lc2
X-Runtime: 0.066135
X-Ua-Compatible: IE=edge
X-Xss-Protection: 1; mode=block
HTTP/1.1 308 Permanent Redirect
Server: nginx/1.19.2
Date: Thu, 01 Oct 2020 06:53:30 GMT
Content-Type: text/html
Content-Length: 171
Connection: keep-alive
Location: https://git.domain.com/users/sign_in
HTTP/1.1 200 OK
Server: nginx/1.19.2
Date: Thu, 01 Oct 2020 06:53:31 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: max-age=0, private, must-revalidate
Content-Security-Policy-Report-Only: default-src 'self'; frame-src 'self' https://www.recaptcha.net/ https://content.googleapis.com https://content-compute.googleapis.com https://content-cloudbilling.googleapis.com https://content-cloudresourcemanager.googleapis.com; img-src * data: blob:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.recaptcha.net https://apis.google.com 'nonce-YmuidOJcCPaWQjrl3t0TSQ=='; style-src 'self' 'unsafe-inline'
Etag: W/"677139820c392ced1b52beb703903448"
Referrer-Policy: strict-origin-when-cross-origin
Set-Cookie: experimentation_subject_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltUm1OelExTkdZMkxXVmtaVGd0TkRRMFlpMWlNR0V6TFdZd01qRTVNekUwWlRNeE1TST0iLCJleHAiOm51bGwsInB1ciI6ImNvb2tpZS5leHBlcmltZW50YXRpb25fc3ViamVjdF9pZCJ9fQ%3D%3D--d7d168a99b84a564898af05fd50ec894aea007d1; path=/; expires=Mon, 01 Oct 2040 06:53:31 -0000; HttpOnly
Set-Cookie: _gitlab_session=e9bcaf212e959de36470c8f6b4b24847; path=/; expires=Thu, 01 Oct 2020 08:53:31 -0000; HttpOnly
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Frame-Options: DENY
X-Permitted-Cross-Domain-Policies: none
X-Request-Id: SbNxo86mpk6
X-Runtime: 0.324777
X-Ua-Compatible: IE=edge
X-Xss-Protection: 1; mode=block
Versions
- Chart: gitlab/gitlab@4.4.1
- Platform:
- Cloud: EKS
- Kubernetes: (
kubectl version)- Client:
v1.18.4 - Server:
v1.16.13-eks-2ba888
- Client:
- Helm: (
helm version)- Client: v3.2.4
- Server: N/A
Relevant logs
curl -IL https://git.domain.com
curl: (52) Empty reply from server
Edited by Dhruva Chandra