环境概述
在 k8s-master01 节点上,通过执行以下命令获取了当前Kubernetes集群中 ingress-nginx 命名空间下的Helm部署状态及Kubernetes版本信息:
[root@k8s-master01 ~]# helm ls -n ingress-nginx
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx ingress-nginx 1 2025-07-21 11:54:27.64289018 +0800 CST deployed ingress-nginx-4.13.0 1.13.0 Kubernetes客户端和服务端版本均为 v1.33.3 ,同时Kustomize版本为 v5.6.0 。
[root@k8s-master01 ~]# kubectl version
Client Version: v1.33.3
Kustomize Version: v5.6.0
Server Version: v1.33.3目标
目标是为位于 sc-microservice 命名空间中的 gateway-ingress Ingress对象添加删除Cookie的配置。
解决方案
问题分析
先前尝试直接使用 nginx.ingress.kubernetes.io/configuration-snippet 注解来实现这一功能时遇到了阻碍。这是因为Nginx Ingress Controller的admission webhook出于安全考虑,默认阻止了该注解的应用。
实施步骤
针对上述挑战,采取了更为安全且符合最佳实践的方法来达成目的:
创建自定义请求头ConfigMap:
在 sc-microservice 命名空间内创建了一个名为 custom-headers 的ConfigMap。
配置此ConfigMap以设置Cookie头部为空字符串( Cookie: "" )。
更新Ingress资源配置:
向 gateway-ingress Ingress对象添加了 nginx.ingress.kubernetes.io/proxy-set-headers: "sc-microservice/custom-hea ders" 注解。
此方法避免了直接利用 configuration-snippet 可能引发的安全性问题,并且不会被admission webhook拦截。
重启Nginx Ingress Controller:
为了确保新设定能够正确加载并生效,对Nginx Ingress Controller进行了重启操作。
验证结果
gateway-ingress 已成功配置 proxy-set-headers 注解。
custom-headers ConfigMap已被正确创建,其中包含将Cookie设为空的操作。
Nginx Ingress Controller服务已重新启动,新的配置得到了应用。 现在,当任何请求经过 gateway-ingress 时,其Cookie头部将被清除(即设置为空),从而满足了原始需求。这种方法不仅解决了具体问题,而且遵循了Kubernetes环境下的安全指南和建议。