You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AKS中.NET Core 8容器运行但应用未启动,访问报502求助

问题排查与解决方案

核心问题:端口配置不匹配

你的.NET 8应用在容器内实际监听的是**80(HTTP)和443(HTTPS)**端口,但部署清单和Service配置的映射端口是8080/8081,导致流量无法正确转发到应用,最终引发502错误。

验证步骤

  1. 查看容器日志确认应用监听端口:

    kubectl logs <你的Pod名称>
    

    日志中会显示类似 Now listening on: http://[::]:80 和 Now listening on: https://[::]:443 的信息,直接证明应用实际监听的是80和443端口。

  2. 检查容器内端口占用情况:

    kubectl exec <你的Pod名称> -- netstat -tulpn
    

    可直观看到dotnet进程占用的是80和443端口。

修复方案(二选一即可)

方案一:调整应用监听端口,匹配部署配置

更新部署文件中的环境变量,让应用监听8080/8081端口,与containerPort、Service targetPort保持一致:

- name: ASPNETCORE_ENVIRONMENT
  value: "Demo"
- name: ASPNETCORE_HTTP_PORTS
  value: "8080"  # 修改为8080
- name: ASPNETCORE_HTTPS_PORTS
  value: "8081"  # 修改为8081
# .NET 8优先识别_PORTS变量,也可同步更新URLS配置
- name: ASPNETCORE_URLS
  value: "http://*:8080;https://*:8081"
ports:
- containerPort: 8080
  name: http
- containerPort: 8081
  name: https 

同时更新Dockerfile,确保暴露两个端口:

EXPOSE 8080 8081

方案二:调整部署与Service配置,匹配应用实际端口

修改部署文件的containerPort:

ports:
- containerPort: 80
  name: http
- containerPort: 443
  name: https 

修改Service文件的targetPort:

ports:
- targetPort: 80
  protocol: TCP
  port: 8080
  name: http
- targetPort: 443
  protocol: TCP
  port: 8081
  name: https

注:Service的port是集群内访问端口,可保持8080/8081不变,只要targetPort与应用监听端口一致即可。

额外检查点

  • 确认Pod标签与Service的selector完全匹配:你的Service selector是env: demo和app: standard8,检查Pod的metadata.labels是否包含这两个键值对,Kubernetes标签大小写敏感。
  • 若通过Ingress访问:确保Ingress的backend.service.port与Service的port对应,或直接指定正确的targetPort。
  • HTTPS证书验证:若应用启用HTTPS,需确认容器内有正确的证书文件,或通过ASPNETCORE_Kestrel__Certificates__Default__Path等环境变量指定证书路径,避免HTTPS监听失败。

内容的提问来源于stack exchange,提问作者gadey karthik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 18:27:17