配置nginx.ingress.kubernetes.io/rewrite-target注解引发504超时问题排查
问题排查与修复方案
核心原因
你遇到的504超时+无日志问题,本质是rewrite规则的捕获组配置错误,导致请求被转发到了无效的后端路径,同时因为转发逻辑卡住,日志还没来得及记录就超时了。
具体修复步骤
修正rewrite注解与路径匹配规则
针对ingress-nginx v1.5.x版本,要完全移除/api/v1前缀,正确的配置组合是:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 nginx.ingress.kubernetes.io/enable-rewrite-log: "true" # 其他元数据(名称、命名空间等)... spec: rules: - http: paths: - path: /api/v1(/|$)(.*) pathType: Prefix backend: service: name: your-service-name port: number: 80这里的
/api/v1(/|$)(.*)用两个捕获组:第一个捕获/或者路径结束的边界,第二个捕获前缀后的所有内容;/$2表示把请求转发到后端的根路径加上第二个捕获组的内容,彻底去掉/api/v1前缀。确认后端服务的路径兼容性
检查你的应用Pod是否监听根路径/,如果应用本身只处理/api/v1开头的请求,rewrite后会导致请求不匹配,进而超时无响应。调整Controller日志级别
无日志输出可能是因为默认日志级别不够,通过Helm调整Controller的日志参数:# 在Helm values.yaml中添加 controller: extraArgs: v: "3"然后升级Helm release:
helm upgrade ingress-nginx ingress-nginx/ingress-nginx -n ingress-nginx -f values.yaml这样能输出更详细的转发日志,方便排查问题。
验证版本兼容性
确认AKS的Kubernetes v1.24.6与ingress-nginx v1.5.1(chart v4.4.0)兼容,该版本组合是官方支持的,若仍有问题可以尝试重启Controller Pod加载最新配置:kubectl rollout restart deployment ingress-nginx-controller -n ingress-nginx
验证方法
修改Ingress配置后重新应用,然后测试请求,同时查看Controller日志:
kubectl apply -f your-ingress.yaml kubectl logs -n ingress-nginx $(kubectl get pods -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx -o jsonpath='{.items[0].metadata.name}') -f
此时应该能看到rewrite日志,且请求不再超时。
内容的提问来源于stack exchange,提问作者tmaurst
相关产品推荐
相关产品推荐

