K8s 1.14.5中nginx-ingress-controller缓存禁用及已吊销token异常返回解决
Nginx Ingress 缓存失效问题解决步骤
该版本(nginx-ingress-controller:0.21.0-rancher3)为Rancher定制的旧版本Ingress Controller,默认未针对带Authorization头的鉴权请求做缓存豁免,且与官方新版Ingress的缓存控制注解不兼容,是你尝试配置禁用缓存不生效的核心原因。
第一步:确认缓存命中情况
先添加如下注解验证响应是否来自Ingress缓存:
nginx.ingress.kubernetes.io/configuration-snippet: | add_header X-Cache-Status $upstream_cache_status always;
使用已吊销的token请求Ingress域名,查看响应头中X-Cache-Status的值:
- 值为
HIT:确认是Ingress缓存导致的问题 - 值为
MISS/BYPASS:需要排查Ingress上层CDN/WAF缓存、请求头被篡改等其他问题
第二步:适配该版本的缓存禁用配置
不要使用官方新版的nginx.ingress.kubernetes.io/cache-enabled: "false"注解,该版本不支持,直接通过自定义配置片段全量禁用对应接口的缓存:
nginx.ingress.kubernetes.io/configuration-snippet: | # 强制跳过缓存读取、不写入缓存 proxy_no_cache 1; proxy_cache_bypass 1; # 缓存Key加入Authorization头,避免不同token共用缓存 proxy_cache_key "$host$request_uri$http_authorization"; # 强制返回不缓存的响应头,避免上层节点缓存 add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0" always;
如果仅需要针对userinfo接口生效,可以在配置片段外层加路径匹配规则,避免影响其他业务接口。
第三步:异常场景排查
如果配置后问题仍未解决,按如下顺序排查:
- 检查Ingress Controller全局配置:进入Ingress Controller Pod查看
/etc/nginx/nginx.conf,确认是否有全局强制开启的缓存规则,如有需要修改Ingress Controller对应的ConfigMap删除全局缓存配置 - 排除上层缓存:直接在集群节点上curl Inress Controller Pod的IP+服务端口模拟外部请求,排除Ingress上层的负载均衡、WAF、CDN等中间层缓存的影响
- 确认请求头透传:检查是否有配置丢弃
Authorization头,添加如下注解强制透传鉴权头:
nginx.ingress.kubernetes.io/pass-headers: "Authorization"
内容的提问来源于stack exchange,提问作者hossein bazrafkan
相关产品推荐
相关产品推荐

