-
Notifications
You must be signed in to change notification settings - Fork 152
Description
I am trying to setup a basic Load-Balancer using kubernetes. I tried everything and looked at every configuration and even in the source code, but I cannot figure out how to achieve the configuration I want.
What I want to achieve is this:
HTTP on port 80 -> HTTP on port 80
HTTPS on port 443 -> HTTPS on port 443
Note that this is not a passthrough. The load-Balancer unencrypts the request using the certificate in my account, then re-sends it via HTTPS to my pod using a self-signed certificate.
When I set this up manually via the interface, it works well. However it does not seem to be possible using Kubernetes. The kubernetes service always create this setup:
HTTP on port 80 -> HTTP on port 80
HTTPS on port 443 -> HTTP on port 443
So it tries to do HTTP on my port 443 and it does not work (note: In this example I redacted the real target port so it’s easier to understand).
This seems to be because of this part of the code:
digitalocean-cloud-controller-manager/cloud-controller-manager/do/loadbalancers.go
Line 862 in e4fb291
| forwardingRule.TargetProtocol = protocolHTTP |
Here is my current Kubernetes service for reference:
apiVersion: v1
kind: Service
metadata:
name: server
annotations:
service.beta.kubernetes.io/do-loadbalancer-name: "xxx"
service.beta.kubernetes.io/do-loadbalancer-size-slug: "lb-small"
service.beta.kubernetes.io/do-loadbalancer-protocol: "http"
service.beta.kubernetes.io/do-loadbalancer-http-ports: "80"
service.beta.kubernetes.io/do-loadbalancer-tls-ports: "443"
service.beta.kubernetes.io/do-loadbalancer-tls-passthrough: "true"
service.beta.kubernetes.io/do-loadbalancer-redirect-http-to-https: "true"
service.beta.kubernetes.io/do-loadbalancer-enable-proxy-protocol: "true"
service.beta.kubernetes.io/do-loadbalancer-certificate-id: "xxx"
service.beta.kubernetes.io/do-loadbalancer-algorithm: "least_connections"
service.beta.kubernetes.io/do-loadbalancer-healthcheck-port: "443"
service.beta.kubernetes.io/do-loadbalancer-healthcheck-protocol: "https"
service.beta.kubernetes.io/do-loadbalancer-healthcheck-path: "/api/health-check"
service.beta.kubernetes.io/do-loadbalancer-healthcheck-check-interval-seconds: "5"
service.beta.kubernetes.io/do-loadbalancer-healthcheck-response-timeout-seconds: "5"
service.beta.kubernetes.io/do-loadbalancer-healthcheck-unhealthy-threshold: "3"
service.beta.kubernetes.io/do-loadbalancer-healthcheck-healthy-threshold: "2"
spec:
type: LoadBalancer
selector:
app: server
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
- name: https
protocol: TCP
port: 443
targetPort: 443