AKS中Ingress配置问题:无法访问ASP.NET Core API指定路由
针对你遇到的Ingress无法访问/api/opportunities/路由的问题,从提供的K8s配置来看,主要有以下几个可能的问题及修复方案:
1. Ingress重写规则与API路由不匹配
你的Ingress配置中,重写规则将/api(/|$)(.*)重写到/$2,这会把外部请求的/api/opportunities/转换为向内部服务请求/opportunities/。但如果你的ASP.NET Core API控制器路由本身带有/api前缀(比如[Route("api/[controller]")]),内部服务就不存在/opportunities/这个路由,自然会返回404。
修复方案:
调整重写目标,保留api前缀:
nginx.ingress.kubernetes.io/rewrite-target: /api/$2
如果你的API路由是从根路径开始的(比如[Route("[controller]")]),当前重写规则没问题,但需要确认API的实际路由配置。
2. PathType与正则规则冲突
当启用nginx.ingress.kubernetes.io/use-regex: "true"时,pathType: Prefix可能导致Nginx Ingress的路径匹配逻辑异常——Prefix类型是基于前缀匹配,而正则是模式匹配,两者混用可能不符合预期。
修复方案:
将pathType改为ImplementationSpecific:
pathType: ImplementationSpecific
3. 验证集群内部服务可用性
先排除服务本身的问题,在集群内部测试API是否可访问:
# 临时启动curl容器测试内部服务 kubectl run -it --rm --image=curlimages/curl curl-test -- curl opportunities-api/api/opportunities/
如果该请求也失败,说明问题出在Deployment或Service配置上,比如容器未正常启动、端口映射错误,或者API本身存在运行异常。
4. 确认Ingress Controller状态
检查Ingress是否获取到外部IP:
kubectl get ingress opportunities-api
如果ADDRESS字段为空,说明Ingress Controller未正确部署或未分配外部IP,需确认AKS上的Nginx Ingress Controller是否按步骤部署完成。
修复后的完整Ingress配置示例
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: opportunities-api annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: /api/$2 spec: ingressClassName: nginx rules: - http: paths: - path: /api(/|$)(.*) pathType: ImplementationSpecific backend: service: name: opportunities-api port: number: 80
内容的提问来源于stack exchange,提问作者dennitorf

