Azure Kubernetes集群部署服务后Ingress访问404问题排查
问题排查与解决步骤
1. 确认Nginx Ingress Controller部署状态
先检查Ingress Controller的Pod运行状态及Service的External IP分配情况:
kubectl get pods -n ingress-nginx kubectl get service -n ingress-nginx
- 若Pod未正常运行,需确认Azure集群上的Nginx Ingress Controller部署流程正确(比如通过helm或官方YAML完成安装)
- 确认Ingress Service的External IP已完成分配,状态不为
<pending>
2. 修正Ingress路径重写规则
你的Ingress配置中,路径/v1(/|$)(.*)配合rewrite-target: /$2会将/v1重写为后端服务的根路径/,若后端应用未配置根路径路由,就会返回404。可根据实际需求调整:
- 若后端应用接口基于
/v1前缀,修改重写规则:
metadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: /v1/$2 nginx.ingress.kubernetes.io/proxy-body-size: 100m
- 若无需路径重写,直接移除
rewrite-target注解,调整路径配置:
metadata: annotations: nginx.ingress.kubernetes.io/proxy-body-size: 100m spec: rules: - http: paths: - path: /v1 pathType: Prefix backend: service: name: service-st port: number: 3046
3. 验证后端服务可用性
在集群内部测试Service与后端Pod的连通性:
# 启动临时测试Pod kubectl run -it --rm --image=curlimages/curl test-curl # 在测试Pod内访问Service根路径 curl service-st:3046 # 或访问预期接口路径,比如 curl service-st:3046/v1
- 若访问Service返回404,说明后端容器内的应用未配置对应路由,需检查应用监听端口(确认是3046)及接口路径配置
- 若Service访问正常,问题则出在Ingress转发环节
4. 检查Ingress资源状态与事件
查看Ingress资源的详细信息,确认规则是否生效:
kubectl describe ingress k8s-ingress
- 检查
Events字段,排查是否存在Service找不到、端口不匹配等报错 - 确认
Ingress Class与部署的Nginx Controller的class名称一致(默认是nginx,若部署时修改过需对应调整)
5. 查看Nginx Ingress Controller日志
通过日志定位转发过程中的具体错误:
kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx
日志会记录请求的转发路径、后端服务的响应状态,帮助区分是Ingress转发问题还是后端服务自身问题
内容的提问来源于stack exchange,提问作者Erika
相关产品推荐
相关产品推荐

