在实际业务转发场景中,经常会有添加或更新 http header 的需求,比如在请求头中加入 token 密钥以方便接口校验(请求上游时设置)或设置允许跨域请求头(响应客户端时添加)等需求,示例配置如下:
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的命名空间。
在 "set-headers"configmap
中配置要设置的 headers ,如下图:
apiVersion: v1
data:
...
authentication: "BaFdLUhcs*********YhY"
...
kind: ConfigMap
metadata:
name: set-headers # configmap 名
namespace: kube-system
在 "add-headers"configmap
中配置要添加的 headers ,如下图:
apiVersion: v1
data:
...
Access-Control-Allow-Headers: 'sw8'
...
kind: ConfigMap
metadata:
name: add-headers # configmap 名
namespace: kube-system
将上述配置应用到集群中后,在 "<实例名>-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 容器中查看配置:
cat /etc/nginx/nginx.conf | less
通过查找可以看到相关配置已生效,如下图:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。