使用 ConfigMap 将 Headers 添加到 NGINX Ingress 无效
Adding Headers to NGINX Ingress using ConfigMap not working
我正在尝试使用 Azure 上的 Kubernetes 通过我的 NGINX Ingress 传递我的客户端 IP 地址
我为 NGINX 配置创建了这个配置映射以添加 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
然后添加此配置以引用以前的文件:
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
如果我描述我的 nginx 控制器:
kubectl describe deploy ingress-nginx-controller
我能看到这行:
--configmap=$(POD_NAMESPACE)/ingress-nginx-controller
如果我描述 ingress-nginx-controller configmap
kubectl describe configmap ingress-nginx-controller
我可以在数据部分看到以下内容:
proxy-set-headers:
----
custom-headers
如果我在控制器中注销 nginx.conf 文件,我将看不到更改后的值。例如,这仍然是默认值:
proxy_set_header X-Forwarded-For $remote_addr;
您缺少 proxy-set-headers 值的命名空间前缀。因为你已经部署了 custom-headers
configmap 到默认命名空间,所以应该是
data:
proxy-set-headers: default/custom-headers
我有运行一些测试,用户提供的答案Yadhu应该是正确的。
问题解释:
您正在为 ConfigMaps. It is well described here 使用 proxy-set-headers
配置选项:
Sets custom headers from named configmap before sending traffic to backends. The value format is namespace/name. See example
在此示例中,您可以通过 ConfigMap 找到 nginx 入口控制器的配置,以将 headers 的自定义列表传递到上游服务器。
看例子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
问题解答:
您需要在此选项中使用正确的格式:
proxy-set-headers: "<your namespace>/custom-headers"
我正在尝试使用 Azure 上的 Kubernetes 通过我的 NGINX Ingress 传递我的客户端 IP 地址
我为 NGINX 配置创建了这个配置映射以添加 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
然后添加此配置以引用以前的文件:
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
如果我描述我的 nginx 控制器:
kubectl describe deploy ingress-nginx-controller
我能看到这行:
--configmap=$(POD_NAMESPACE)/ingress-nginx-controller
如果我描述 ingress-nginx-controller configmap
kubectl describe configmap ingress-nginx-controller
我可以在数据部分看到以下内容:
proxy-set-headers:
----
custom-headers
如果我在控制器中注销 nginx.conf 文件,我将看不到更改后的值。例如,这仍然是默认值:
proxy_set_header X-Forwarded-For $remote_addr;
您缺少 proxy-set-headers 值的命名空间前缀。因为你已经部署了 custom-headers
configmap 到默认命名空间,所以应该是
data:
proxy-set-headers: default/custom-headers
我有运行一些测试,用户提供的答案Yadhu应该是正确的。
问题解释:
您正在为 ConfigMaps. It is well described here 使用 proxy-set-headers
配置选项:
Sets custom headers from named configmap before sending traffic to backends. The value format is namespace/name. See example
在此示例中,您可以通过 ConfigMap 找到 nginx 入口控制器的配置,以将 headers 的自定义列表传递到上游服务器。
看例子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
问题解答: 您需要在此选项中使用正确的格式:
proxy-set-headers: "<your namespace>/custom-headers"