I'm trying to create a rule to forward https request to an https backend with an Kubernetes ngnix ingress controller. So far I was not able to create a working rule. I've tried several ingress statements in my k8s manifest:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hs-ingress
annotations:
ingress.kubernetes.io/rewrite-target: /
# nginx.ingress.kubernetes.io/ssl-redirect: "true"
# ingress.kubernetes.io/ssl-redirect: "true"
# ingress.kubernetes.io/ssl-passthrough: "true"
# nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
# nginx.ingress.kubernetes.io/ssl-passthrough: "true"
# ingress.kubernetes.io/backend-protocol: "HTTPS"
# ingress.kubernetes.io/ssl-passthrough: "true"
namespace: heartbleed-test
spec:
rules:
- http:
paths:
- path: /banana
backend:
serviceName: hs-service
servicePort: 443
After some digging I figured out that the problem is the proxy_pass property in the ingress rule on the controller:
proxy_pass: http://heartbleed-test-hs-service-443;
When i change http to https everything works as expected. So how do I set this property from my k8s manifest?
If your host paths are the same with your rule and backend service, then you don't have to specify rewrite rule, just path for backend service. But if paths are different, then consider using nginx.ingress.kubernetes.io/rewrite-target: /pathYouWantToProxyPassTo
annotation; otherwise, you will get 404 backend error