kubernetes: ELB not redirecting to https despite nginx configuration

1/9/2018

I have a LoadBalancer service on a k8s deployment on aws (made via kops).

Service definition is as follows:

apiVersion: v1
kind: Service
metadata:
  name: ui
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: <certificate_id>
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
spec:
  ports:
  - name: http
    port: 80
    targetPort: ui-port
    protocol: TCP
  - name: https
    port: 443
    targetPort: ui-port
    protocol: TCP
  selector:
    els-pod: ui
  type: LoadBalancer

Here is the respective deployment:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: ui-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        els-pod: ui
    spec:
      containers:
      - image: <my_ecr_registry>/<my_image>:latest
        name: ui
        ports:
        - name: ui-port
          containerPort: 80
      restartPolicy: Always

I know that <my_image> exposes port 80.

I have also assigned an alias to the ELB that gets deployed, say. my-k8s.mydomain.org

The ui pods include an nginx image, which within both within the server context and the / location block, has the following directive:

  if ($http_x_forwarded_proto != 'https') {
        rewrite ^ https://$host$request_uri? permanent;
    }

However when accessing the service (i.e. the domain name assigned as an alias to the ELB) via http, I do not get redirected to https.

-- pkaramol
amazon-web-services
kubernetes
nginx

1 Answer

6/21/2018

I had the opposite problem and solved it by adding a nginx.ingress.kubernetes.io/ssl-redirect: "false".

Maybe for you a config like:

metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "true"

could fix your problem?

-- herm
Source: StackOverflow