Kubernetes ingress: How to enable HTTPS to backend service

10/17/2017

A typical ingress with TLS configuration is like below:

apiVersion: extensions/v1beta1 kind: Ingress metadata: name: no-rules-map spec: tls: - secretName: testsecret backend: serviceName: s1 servicePort: 80

By default, the load balancer will talk to backend service in HTTP. Can I configure Ingress so that the communication between load balancer and the backend service is also HTTPS?

Update:

Found GLBC talking about enabling HTTPS backend for GCE Ingress. Excerpt from the document:

"Backend HTTPS

For encrypted communication between the load balancer and your Kubernetes service, you need to decorate the service's port as expecting HTTPS. There's an alpha Service annotation for specifying the expected protocol per service port. Upon seeing the protocol as HTTPS, the ingress controller will assemble a GCP L7 load balancer with an HTTPS backend-service with a HTTPS health check."

It is not clear if the load balancer accepts 3rd party signed server certificate, self-signed, or both. How CA cert should be configured on load balancer to do backend server authentication. Or it will bypass authentication check.

-- aaskey
google-kubernetes-engine
kubernetes

2 Answers

10/25/2017

Follow the instructions in "Backend HTTPS" section of GLBC, GCP HTTP(S) load balancer will build a HTTPS connection with the backend, traffic will be encrypted. There is no need to configure CA certificate on LB side (Actually you can't). This implies the load balancer will skip server certificate authentication.

-- aaskey
Source: StackOverflow

10/19/2017

You should enable SSL-Passthrough config for the ingress or load balancer. I suggest you using nginx ingress and kube-lego for SSL.

with this combination, you can use the ssl-passthrough config.

Nginx ingress for k8s

kube-lego for generating SSL certificate on the fly

Guidance for enable ssl-passthrough config

-- Alireza Davoodi
Source: StackOverflow