Home > OS >  Adding Headers to NGINX Ingress using ConfigMap not working
Adding Headers to NGINX Ingress using ConfigMap not working

Time:10-16

I'm trying to pass my client IP address through my NGINX Ingress using Kubernetes on Azure

I've created this configmap for the NGINX config to add the headers:

apiVersion: v1
data:
  X-Real-IP: $remote_addr;
  X-Forwarded-For: $proxy_add_x_forwarded_for;
  X-Forwarded-Proto: $proxy_x_forwarded_proto;
  use-forwarded-headers: "true"
  use-proxy-protocol: "true"
  real-ip-header: "proxy_protocol"
kind: ConfigMap
metadata:
  name: custom-headers
  namespace: default

Then added this config to reference the previous file:

apiVersion: v1
data:
  proxy-set-headers: "custom-headers"
  externalTrafficPolicy: Local
kind: ConfigMap
metadata:
  name: ingress-nginx-controller
  namespace: default
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

If I describe my nginx controller:

kubectl describe deploy ingress-nginx-controller

I can see the line:

--configmap=$(POD_NAMESPACE)/ingress-nginx-controller

If I describe the ingress-nginx-controller configmap

kubectl describe configmap ingress-nginx-controller

I can see the following in the data section:

proxy-set-headers:
----
custom-headers

If I log out the nginx.conf file in my controller though, I can't see the changed values. For example this is still the default:

proxy_set_header X-Forwarded-For        $remote_addr;

CodePudding user response:

You are missing the namespace prefix for proxy-set-headers value. Because you have deployed custom-headers configmap to the default namespace, it should be

data:
  proxy-set-headers: default/custom-headers

CodePudding user response:

I have run some tests and the answer provided by the user Yadhu should be correct.

Problem explanation: You are using proxy-set-headers configuration option for ConfigMaps. It is well described here:

Sets custom headers from named configmap before sending traffic to backends. The value format is namespace/name. See example

In this example you can find configuration of the nginx ingress controller via a ConfigMap to pass a custom list of headers to the upstream server.

Look at the example yaml:

apiVersion: v1
data:
  proxy-set-headers: "ingress-nginx/custom-headers"
kind: ConfigMap
metadata:
  name: ingress-nginx-controller
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

Problem soultion: You need to use proper format in this option:

proxy-set-headers: "<your namespace>/custom-headers"
  • Related