如何修复自定义域名下Kestrel托管HTTPS ASP.NET Core 6应用的Ingress问题
问题分析与解决
核心问题
你的ASP.NET Core容器内部监听HTTPS 5001端口,但Azure Container Apps的Ingress配置里transport设为了Http——这意味着Ingress会用HTTP协议去连接容器的HTTPS端口,协议不匹配直接导致连接终止,出现upstream connect error。
解决方案
方案1:调整Ingress传输协议匹配容器HTTPS
把Ingress配置中的"transport": "Http"改成以下两种之一:
- 用Http2传输(适配HTTP/2协议的HTTPS服务):
"transport": "Http2" - 用Tcp传输(纯TCP转发,直接传递HTTPS流量到容器):
"transport": "Tcp"
修改后重新部署Ingress配置,测试自定义域名访问。
方案2:容器改用HTTP监听,Ingress处理外部HTTPS(更简洁)
如果不需要容器内部强制HTTPS,可以简化配置:
- 修改Dockerfile,移除HTTPS相关配置,改用HTTP监听:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 ENV ASPNETCORE_ENVIRONMENT=Development # 删除Kestrel证书相关环境变量 ENV ASPNETCORE_URLS=http://0.0.0.0:5001 EXPOSE 5001 WORKDIR /mnt/nextgen/ERP CMD ["dotnet", "/mnt/nextgen/ERP/runtime/bin/cmNG.web.dll"] - 保持Ingress配置的
"transport": "Http"和allowInsecure: false——Ingress会自动将外部HTTPS请求转发为HTTP请求到容器内部。
额外验证点
- 确认容器内的PFX证书路径
/mnt/nextgen/ERP/https/cmng-erp.9knots.nl.pfx存在且权限正常(日志未报证书加载错误的话,此部分大概率无问题)。 - 自定义域名绑定的证书与容器内证书无需一致(Ingress和容器的HTTPS是独立两层),但要确保Ingress的证书已正确关联到自定义域名。
内容的提问来源于stack exchange,提问作者Matthijs van Zetten
相关产品推荐
相关产品推荐

