Kubernetes Ingress带动态参数对接ASP.NET Core Web API配置问题咨询
Kubernetes Ingress对接ASP.NET Core Web API路径异常解决方案
配置错误根因
你当前遇到所有请求都返回##的核心原因有两个:
- 使用了正则匹配的path规则,但
pathType配置为Prefix而非正则匹配要求的ImplementationSpecific,导致分组捕获失效,rewrite-target中的$2一直为空,所有请求都被重写到根路径/,所以全部命中根路径接口 - 你的需求是透传全路径到后端服务,完全不需要加
rewrite-target相关注解,额外的重写规则反而增加了出错概率
可行的Ingress透传配置
你只需要用以下最简配置就可以实现路径全透传,完全满足你的测试需求:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress annotations: kubernetes.io/ingress.class: nginx spec: rules: - host: myhost.com http: paths: - path: / pathType: Prefix backend: service: name: myservice port: number: 80
该配置会把myhost.com/xxx所有路径原封不动传给后端服务,访问/ep1就会返回1、/ep2返回2、/返回##,完全符合你的预期。
动态路径参数实现方案
你提到的myhost.com/balance/1312323这类带动态参数的路径,不需要对Ingress做特殊配置,沿用上面的全路径透传规则即可,后端ASP.NET Core按正常路由规则开发就行:
最小API写法示例
endpoints.MapGet("/balance/{userId}", async (HttpContext context, long userId) => { // 业务逻辑:根据userId查询账户余额 await context.Response.WriteAsync($"用户{userId}的账户余额为XXX"); });
控制器写法示例
[ApiController] [Route("[controller]")] public class BalanceController : ControllerBase { [HttpGet("{userId}")] public IActionResult GetBalance(long userId) { // 业务逻辑:根据userId查询账户余额 return Ok(new { UserId = userId, Balance = 239.87 }); } }
ASP.NET Core的路由系统会自动解析路径中的userId参数,不需要Ingress做额外处理。
内容的提问来源于stack exchange,提问作者Ohad
相关产品推荐
相关产品推荐

