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

Azure Kubernetes中Duende Identity Server连接异常求助

排查AKS上Duende Identity Server的502 Bad Gateway及连接超时问题

我是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错误。
    修复步骤:

    1. 确认容器内应用实际监听端口:执行kubectl exec -it <pod-name> -- netstat -tulpn查看,或检查应用的appsettings.json中Urls配置项。
    2. 修改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超时,需检查:

    1. 确认Ingress Controller外部IP分配:执行kubectl get ingress test-ingress查看ADDRESS字段是否为有效IP。
    2. 检查AKS网络安全组(NSG)是否开放80/443端口,允许外部流量访问Ingress Controller IP。
    3. 验证DNS解析:确认test.eastus.cloudapp.azure.com正确指向Ingress Controller的外部IP。
  • 容器应用状态验证
    即使Pod显示运行,仍需确认应用是否正常启动:

    1. 查看Pod日志:kubectl logs <pod-name>,排查是否有启动错误或端口监听失败日志。
    2. 进入Pod内部测试连通性:kubectl exec -it <pod-name> -- curl http://localhost:<实际端口>,确认应用能正常返回响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:40:41