Kong Ingress配置问题:ASP.NET Core MVC路由异常及配置方案咨询
Kong Ingress 适配ASP.NET Core 6 MVC的路由配置方案
问题根源分析
你遇到的{"message": "An invalid response was received from the upstream server"}错误,核心原因是Kong与上游ASP.NET Core应用的请求转发逻辑不匹配,要么是Ingress配置细节缺失,要么是应用未正确处理反向代理请求。
正确的Ingress配置
以下是实现https://res0ingresskong.resources.root.gc.local/onename路由至应用根路径/的完整YAML配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: aspnetcore-app-ingress annotations: konghq.com/strip-path: "true" konghq.com/preserve-host: "false" # 必须指定上游通信协议,避免Kong与应用的协议不匹配 konghq.com/protocol: "http" # 若应用用HTTPS则改为https,根据实际服务端口调整 spec: ingressClassName: kong rules: - host: res0ingresskong.resources.root.gc.local http: paths: - path: /onename pathType: Prefix backend: service: name: your-aspnetcore-service # 替换为你的应用服务名称 port: number: 80 # 替换为应用服务暴露的端口
核心配置项说明
konghq.com/strip-path: "true":强制Kong移除请求路径中的/onename前缀,转发给应用的路径变为/,匹配应用的基准路径。pathType: Prefix:明确采用前缀匹配规则,确保所有/onename开头的请求都被正确路由。konghq.com/protocol:指定Kong与上游服务的通信协议,这是容易忽略的点,协议不匹配会直接导致无法获取有效响应。
应用侧必要调整(若配置后仍报错)
如果Ingress配置完成后还是报错,需要修改ASP.NET Core的反向代理支持:
在Program.cs中添加转发头处理逻辑,确保应用能识别Kong转发的请求:
var builder = WebApplication.CreateBuilder(args); // 配置反向代理转发头 builder.Services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; // 添加Kong代理的IP段到可信列表,替换为你的集群内Kong实际IP段 options.KnownProxies.Add(IPAddress.Parse("10.0.0.0/8")); }); // 注册MVC服务等... var app = builder.Build(); // 转发头中间件必须放在路由之前 app.UseForwardedHeaders(); // 其他中间件(路由、授权等)... app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
同时确保应用内所有链接都使用相对路径,避免硬编码绝对路径导致的资源加载失败。
验证步骤
- 应用配置:
kubectl apply -f [你的Ingress配置文件名].yaml - 检查Ingress状态:
kubectl get ingress,确认ADDRESS字段有值且状态正常 - 测试请求:
curl -v https://res0ingresskong.resources.root.gc.local/onename,验证是否返回应用正常响应
内容的提问来源于stack exchange,提问作者stefano de simone
相关产品推荐
相关产品推荐

