Scenario
I'm running NGINX and Kubernetes. I need to configure NGINX so that it sets or overrides the Host header Host: minio:9000
to a pod so that the Pod will always service requests thinking that it's hosting as minio:9000
no matter where the request is coming from. I believe the recommended approach is to use NGINX and modify the ingress annotations of that Pod (maybe I'm wrong).
How I currently set it up
I instead my nginx controller with helm via this guide https://kubernetes.github.io/ingress-nginx/deploy/#using-helm
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install my-release ingress-nginx/ingress-nginx
I declared my ingress like this. Guides have suggested I use nginx annotations on the ingress YAML.
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: {{ template "fullname" . }}
labels:
chart: {{ template "chartVersion" . }}
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/configuration-snippet: |
more_set_input_headers 'Host: minio:9000';
spec:
rules:
- host: {{ .Values.ingress.host }}
http:
paths:
- path: /
backend:
serviceName: {{ template "fullname" . }}
servicePort: {{ .Values.deployment.servicePort }}
Many guides have said this would work. I've tried
nginx.ingress.kubernetes.io/upstream-vhost: minio:9000
I've also tried
nginx.ingress.kubernetes.io/configuration-snippet: |
access_by_lua_block {
ngx.var.best_http_host = 'minio:9000';
}
None of these methods seem to change the host header from inside the cluster. If I do
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header Host 'minio:9000';
I get a 400 response saying too many Host
headers (which seems to be caused by the Pod running Go). But at least I know the annotations are being picked up by nginx.
Questions
- How can I configure NGINX in kubernetes so that it changes the Host header from inside the ingress?
- Perhaps I installed NGINX the wrong way? It doesn't seem easy to modify the conf files from NGINX if you install it through helm. Is it better to install NGINX manually and not through k8s or helm?