AKS中.NET Core 8容器运行但应用未启动,访问报502求助
问题排查与解决方案
核心问题:端口配置不匹配
你的.NET 8应用在容器内实际监听的是**80(HTTP)和443(HTTPS)**端口,但部署清单和Service配置的映射端口是8080/8081,导致流量无法正确转发到应用,最终引发502错误。
验证步骤
查看容器日志确认应用监听端口:
kubectl logs <你的Pod名称>日志中会显示类似
Now listening on: http://[::]:80和Now listening on: https://[::]:443的信息,直接证明应用实际监听的是80和443端口。检查容器内端口占用情况:
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
相关产品推荐
相关产品推荐

