Minikube集群中用DevSpace时FastAPI Docs出现502网关错误求助
问题:使用DevSpace后Ingress访问FastAPI Docs出现502 Bad Gateway
在Minikube集群中正常运行应用时,可通过Ingress访问FastAPI Docs;但使用DevSpace启动后,虽能确认Pod内代码已同步变更,访问192.168.64.112/api/v1/project/tasks/docs时却出现502 Bad Gateway错误。
相关配置文件
api-pod.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: project-api spec: replicas: 1 selector: matchLabels: app: project-api template: metadata: labels: app: project-api spec: containers: - image: project/project-api:0.0.1 name: project-api command: ["uvicorn"] args: ["endpoint:app", "--port=8000", "--host", "0.0.0.0"] imagePullPolicy: IfNotPresent livenessProbe: httpGet: path: /api/v1/project/tasks/ port: 8000 initialDelaySeconds: 5 timeoutSeconds: 1 periodSeconds: 600 failureThreshold: 3 ports: - containerPort: 8000 name: http protocol: TCP --- apiVersion: v1 kind: Service metadata: name: project-api spec: selector: app: project-api ports: - port: 8000 protocol: TCP targetPort: http type: ClusterIP
api-ingress.yaml
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: project-ingress spec: rules: - http: paths: - path: /api/v1/project/tasks/ pathType: Prefix backend: service: name: project-api port: number: 8000 ingressClassName: nginx --- apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: nginx spec: controller: k8s.io/ingress-nginx
集群资源状态
Endpoints(kubectl get ep)
NAME ENDPOINTS AGE project-api 172.17.0.6:8000 17m
Service(kubectl get svc)
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE project-api ClusterIP 10.97.182.167 <none> 8000/TCP 17m
Ingress(kubectl get ingress)
NAME CLASS HOSTS ADDRESS PORTS AGE api-ingress nginx * 192.168.64.112 80 17m
运行环境
- MacOS Monterey: 12.4
- Minikube version: v1.26.0(使用hyperkit作为虚拟机)
- Ingress controller: k8s.gcr.io/ingress-nginx/controller:v1.2.1
- Devspace version: 5.18.5
排查与解决步骤
1. 验证Pod内应用可用性
进入DevSpace启动的Pod,直接测试应用端口:
curl localhost:8000/api/v1/project/tasks/docs
如果返回异常,检查DevSpace是否覆盖了启动命令(比如将--host 0.0.0.0改为127.0.0.1,导致仅Pod本地可访问)。
2. 检查Service到Pod的连通性
在集群内启动临时Pod,测试Service访问:
kubectl run -it --rm busybox --image=busybox:1.35 -- wget -O- http://project-api:8000/api/v1/project/tasks/docs
如果失败,确认DevSpace未修改Pod标签:执行kubectl describe pod <devspace-pod-name>,检查app: project-api标签是否存在,确保Service的Selector能匹配Pod。
3. 查看Ingress Controller日志
通过日志定位502错误原因:
kubectl logs -n ingress-nginx deployment/ingress-nginx-controller
常见触发点:应用启动失败未监听端口、Ingress路径转发不匹配、DevSpace同步机制导致应用重启异常。
4. 检查DevSpace配置干扰
查看devspace.yaml,确认:
- 未设置冲突的端口转发规则
- 代码同步未破坏应用依赖或导致进程崩溃
5. 确认Liveness Probe状态
执行kubectl describe pod <devspace-pod-name>,检查Liveness Probe的成功/失败记录,如果Probe失败,Pod会被标记为不健康,Ingress将停止转发流量。
内容的提问来源于stack exchange,提问作者DataPlug
相关产品推荐
相关产品推荐

