Azure Kubernetes中Duende Identity Server连接异常求助
我是Kubernetes新手,已在Azure Kubernetes Service(AKS)上部署Duende Identity Server,Pod处于运行状态,但通过浏览器访问时出现502 Bad Gateway,Ingress日志显示connect() failed (111: Connection refused) while connecting to upstream;尝试通过外部IP访问则出现ERR_CONNECTION_TIMED_OUT。以下是我的Deployment、Service及Ingress配置代码:
部署配置
apiVersion: apps/v1 kind: Deployment metadata: name: test-server-depl namespace: default spec: replicas: 1 selector: matchLabels: app: test-server template: metadata: labels: app: test-server azure.workload.identity/use: "true" annotations: azure.workload.identity/inject-proxy-sidecar: "true" spec: serviceAccountName: test-dev-service-account containers: - name: test-server image: test.azurecr.io/test-server imagePullPolicy: IfNotPresent ports: - containerPort: 9443 env: - name: "ASPNETCORE_ENVIRONMENT" value: "Development" volumeMounts: - name: secrets mountPath: /app/secrets readOnly: true imagePullSecrets: - name: workers-secret volumes: - name: secrets secret: secretName: test-identity-secret-appsettings --- apiVersion: v1 kind: Service metadata: name: test-clusterip-srv spec: type: ClusterIP selector: app: test-server ports: - name: test-server-http protocol: TCP port: 80 targetPort: 980 - name: test-worker-https port: 443 targetPort: 9443 protocol: TCP --- apiVersion: v1 kind: ServiceAccount metadata: annotations: azure.workload.identity/client-id: labels: azure.workload.identity/use: "true" name: test-dev-service-account namespace: default
Ingress配置
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /test$1 nginx.ingress.kubernetes.io/ssl-redirect: "true" nginx.ingress.kubernetes.io/force-ssl-redirect: "true" cert-manager.io/cluster-issuer: letsencrypt spec: ingressClassName: nginx tls: - hosts: - test.eastus.cloudapp.azure.com secretName: tls-secret rules: - host: test.eastus.cloudapp.azure.com http: paths: - path: /test(.*) pathType: ImplementationSpecific backend: service: name: test-clusterip-srv port: number: 80
排查与修复方案
端口映射不匹配(核心问题)
Service中80端口对应的targetPort是980,但Deployment里容器仅暴露了9443端口,且ASP.NET Core开发环境下默认HTTP监听端口为5000、HTTPS为5001(除非自定义配置)。这种端口不匹配直接导致Ingress转发请求时连接被拒绝,触发502错误。
修复步骤:- 确认容器内应用实际监听端口:执行
kubectl exec -it <pod-name> -- netstat -tulpn查看,或检查应用的appsettings.json中Urls配置项。 - 修改Service的
targetPort为容器实际监听端口,例如若应用HTTP监听5000,将Service的80端口targetPort改为5000;若仅启用HTTPS(9443),则Ingress需转发到Service的443端口。
- 确认容器内应用实际监听端口:执行
Ingress转发配置调整
当前Ingress规则转发到Service的80端口,若应用仅监听HTTPS端口,需调整Ingress的backend端口为443:# 修正Ingress的backend部分 backend: service: name: test-clusterip-srv port: number: 443同时注意
rewrite-target配置的/test$1需与应用路由前缀匹配,避免路径转发错误。外部IP访问超时排查
ClusterIP类型Service无外部IP,若访问Ingress Controller外部IP超时,需检查:- 确认Ingress Controller外部IP分配:执行
kubectl get ingress test-ingress查看ADDRESS字段是否为有效IP。 - 检查AKS网络安全组(NSG)是否开放80/443端口,允许外部流量访问Ingress Controller IP。
- 验证DNS解析:确认
test.eastus.cloudapp.azure.com正确指向Ingress Controller的外部IP。
- 确认Ingress Controller外部IP分配:执行
容器应用状态验证
即使Pod显示运行,仍需确认应用是否正常启动:- 查看Pod日志:
kubectl logs <pod-name>,排查是否有启动错误或端口监听失败日志。 - 进入Pod内部测试连通性:
kubectl exec -it <pod-name> -- curl http://localhost:<实际端口>,确认应用能正常返回响应。
- 查看Pod日志:
内容的提问来源于stack exchange,提问作者Arthur

