操作背景
在实际业务转发场景中,经常会有添加或更新 http header 的需求,比如在请求头中加入 token 密钥以方便接口校验(请求上游时设置)或设置允许跨域请求头(响应客户端时添加)等需求,示例配置如下:
代码语言:javascript复制location /v3/segments {
proxy_set_header authentication BaFdLUhcs*********YhY;
add_header Access-Control-Allow-Headers 'sw8';
proxy_pass https://ap-guangzhou.apm.tencentcs.com:12800/v3/segments;
}
上述配置在 Ingress-nginx 可以通过 snippets注解 的方式配置,但为了安全起见,默认情况下,snippets注解
不允许的, 参考: allow-snippet-annotations 。另外,这种方式只能给具体的 ingress 资源配置,如果需要给所有ingress 接口配置就很麻烦, 维护起来很不优雅.
所以推荐通过官方提供的 自定义Header 的方式来配置,下面将介绍如何配置。
操作作步骤
下面以 TKE Ingress-nginx 组件实例在 kube-system (监听所有命名空间)为例,如果是指定命名空间生效需要对应修改 configmap的命名空间。
1. 转发请求到上游时设置(proxy_set_header)
在 "set-headers"configmap
中配置要设置的 headers ,如下图:
apiVersion: v1
data:
...
authentication: "BaFdLUhcs*********YhY"
...
kind: ConfigMap
metadata:
name: set-headers # configmap 名
namespace: kube-system
2.响应客户端时添加 header(add_header)
在 "add-headers"configmap
中配置要添加的 headers ,如下图:
apiVersion: v1
data:
...
Access-Control-Allow-Headers: 'sw8'
...
kind: ConfigMap
metadata:
name: add-headers # configmap 名
namespace: kube-system
3. 将上述配置关联生效
将上述配置应用到集群中后,在 "<实例名>-ingress-nginx-controller"configmap
中配置引用生效,如下图:
apiVersion: v1
data:
...
proxy-set-headers: "kube-system/set-headers" # 按需引用自定义set headers 的configmap
add-headers: "kube-system/add-headers" # 按需引用自定义添加 headers 的configmap
...
kind: ConfigMap
metadata:
name: <实例名>-ingress-nginx-controller
namespace: kube-system
labels:
k8s-app: <实例名>-ingress-nginx-controller
qcloud-app: <实例名>-ingress-nginx-controller
应用配置后验证配置是否已经正常加载,登录 nginx controller 容器中查看配置:
代码语言:javascript复制cat /etc/nginx/nginx.conf | less
通过查找可以看到相关配置已生效,如下图: