Estoy usando una expresión regular para extraer solo la IP de $http_x_origin_forwarded_for, porque viene junto con el puerto y solo necesito la IP para mi encabezado. Así que estoy usando la entrada de esta manera.
ingress: enabled: true annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: /$1 nginx.ingress.kubernetes.io/backend-protocol: https nginx.ingress.kubernetes.io/http-snippet: | map $http_x_origin_forwarded_for $forwarded-for-ip { ~^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+):[0-9]+ $1; default ''; }; nginx.ingress.kubernetes.io/configuration-snippet: | proxy_set_header X-Forwarded-For $http_x_forwarded_for;Y la salida en el lado del servidor es
Header 'x-forwarded-for' = IP:PORTY basado en eso, mi aplicación Spring Boot devuelve este error:
Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Fri Aug 13 06:55:21 UTC 2021 There was an unexpected error (type=Internal Server Error, status=500). Failed to parse address IP: PORTTambién probé así
ingress: enabled: true annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: /$1 nginx.ingress.kubernetes.io/backend-protocol: https nginx.ingress.kubernetes.io/configuration-snippet: | map $http_x_forwarded_for $real_ip { ~^(\d+\.\d+\.\d+\.\d+) $1; default $remote_addr; } proxy_set_header X-Forwarded-For $real_ip;Pero tengo este error
2021/08/14 11:58:54 [emerg] 19862#19862: "map" directive is not allowed here in /tmp/nginx-cfg920601764:940 nginx: [emerg] "map" directive is not allowed here in /tmp/nginx-cfg920601764:940 nginx: configuration file /tmp/nginx-cfg920601764 test failedDependiendo de su versión de k8s, después de que Ingress salió de la versión beta ( apiVersion: networking.k8s.io/v1v1beta1 -> apiVersion: networking.k8s.io/v1 )
Es posible lograr lo que desea configurando los mapas de configuración. Con v1 ; los ingresos usan otro espacio de nombres, en este caso se llama ingress-nginx .
Agregue los siguientes mapas de configuración:
apiVersion: v1 kind: ConfigMap metadata: name: ingress-nginx-controller namespace: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx data: proxy-set-headers: "ingress-nginx/custom-headers" http-snippet: | map $http_x_forwarded_for $real_ip { ~^(\d+\.\d+\.\d+\.\d+) $1; default $remote_addr; } -- apiVersion: v1 kind: ConfigMap metadata: name: custom-headers namespace: ingress-nginx data: X-Forwarded-For: ${updated_x_trace_id}Luego, todos los controladores de ingreso-nginx se verán afectados por este cambio.