升级ingress-nginx-controller与kubewebhook后出现重复Transfer-Encoding头错误
解决方案:上游返回重复Transfer-Encoding头导致ingress-nginx报错
问题原因
新版本ingress-nginx(v1.11+)对响应头的校验更严格,当上游服务(后端或kubewebhook)返回重复的Transfer-Encoding: chunked头时,会直接触发错误拦截;而旧版本v1.9.4会忽略这类重复头,因此升级后问题显现。
排查与解决步骤
1. 确认重复头的来源
直接调用上游服务的搜索接口,检查响应头是否存在重复:
curl -v https://<你的后端服务地址>/search
查看输出中的Response Headers部分,确认是否出现两次Transfer-Encoding: chunked。
- 如果是后端服务直接返回重复头,需修复后端代码逻辑;
- 如果是kubewebhook转发时添加了重复头,需检查kubewebhook的版本变更(v20231011 → v20231226),定位是否是新版本的逻辑bug导致重复添加头。
2. 临时绕过(不推荐长期使用)
若需快速恢复服务,可配置ingress-nginx忽略重复的Transfer-Encoding头:
- 单ingress生效:在对应Ingress资源的annotations中添加:
annotations: nginx.ingress.kubernetes.io/proxy-ignore-headers: "Transfer-Encoding" - 全局生效:修改ingress-nginx的ConfigMap,添加:
data: proxy-ignore-headers: "Transfer-Encoding"
3. 修复上游服务(根本解决)
- 后端服务:修改代码,确保响应只发送一次
Transfer-Encoding: chunked头; - kubewebhook:回退到之前的稳定版本(v20231011-8b53cabe0),或针对新版本的头处理逻辑进行修复。
4. 检查ingress-nginx配置变更
对比v1.9.4与v1.11+/v1.12.x的配置差异,重点关注proxy_merge_headers参数:
- 若该参数默认值从
on改为off,nginx会拒绝合并重复头,此时可在ConfigMap中设置:
注意:开启该参数可能会导致其他重复头被合并,需评估业务影响。data: proxy-merge-headers: "on"
内容的提问来源于stack exchange,提问作者user30128323
相关产品推荐
相关产品推荐

