私有AKS集群搭配AGIC访问出现404错误求助
排查思路与解决方案
1. 检查访问时的Host头匹配
你的Ingress规则明确指定了host: backendpocwebapp.<location>.cloudapp.azure.com,Application Gateway(AG)只会将匹配该Host头的请求转发到对应后端服务。如果直接用AG的公网IP访问,请求未携带指定Host头,AG找不到匹配的路由规则,就会返回404。
验证与解决:
- 用curl测试时手动添加Host头:
curl -H "Host: backendpocwebapp.<location>.cloudapp.azure.com" http://<AG公网IP> - 若希望通过IP直接访问,修改Ingress配置,去掉
host字段或新增无Host头的默认规则:spec: rules: # 保留原带host的规则,新增无host的默认路由 - http: paths: - path: "/" pathType: Prefix backend: service: name: nextjspocapp port: number: 80
2. 确认AGIC与AG的配置同步状态
即便Ingress Controller显示后端健康,仍需确认Ingress路由规则是否同步到AG:
- 查看AGIC Pod日志,检查同步状态:
搜索kubectl logs -n kube-system <agic-pod-name>Applied Application Gateway config或Error while applying config关键词,确认同步是否成功。 - 登录Azure门户,进入AG的规则页面,检查是否存在对应Ingress的路由规则,且规则中的路径、后端池关联正确。
3. 检查AG的后端与健康探测配置
- 查看AG的后端池,确认后端成员为AKS Pod/ClusterIP的IP,且健康探测状态正常。
- 若你的应用健康检查路径不是默认的
/,需在Ingress中添加annotation指定探测路径:metadata: annotations: appgw.ingress.kubernetes.io/health-probe-path: "/healthz"
4. 补充验证网络连通性
你已确认AKS子网路由表关联到Ingress子网,还需检查:
- AG所在子网的路由表是否包含指向AKS节点子网的用户定义路由(UDR),确保AG能访问AKS内部的Pod/Service。
- 网络安全组(NSG)规则:AG子网NSG需允许向AKS子网的80(Service端口)或3000(Pod端口)发起TCP请求;AKS节点子网NSG需允许来自AG子网的入站流量。
5. 验证应用自身路径响应
确认Next.js应用在根路径/返回正常响应:
- 在AKS集群内启动测试Pod,直接访问ClusterIP服务:
检查是否返回200响应及正确内容。kubectl run -it --rm test-pod --image=busybox -- wget -O- http://nextjspocapp.default.svc.cluster.local/
配置优化建议
你的Deployment selector为tier: poc,而Service selector为app: nextjspocapp,当前Pod同时带有两个标签所以能正常关联,但建议保持selector逻辑一致,避免后续修改标签时出现服务断联问题。
内容的提问来源于stack exchange,提问作者inspired_sup
相关产品推荐
相关产品推荐

