从Skaffold+K8s原生清单迁移到DevSpace后Ingress无法工作问题咨询
问题1:Ingress访问返回404的修复方案
你遇到的404问题核心是ingress-nginx v1.0.0版本已完全废弃extensions/v1beta1和networking.k8s.io/v1beta1版本的Ingress API,仅支持networking.k8s.io/v1,DevSpace默认生成的旧版本API资源不会被ingress-nginx识别加载,导致路由规则不生效。
修复步骤如下:
- 在
devspace.yaml的全局配置段指定Ingress使用的API版本,强制生成v1版本资源:
# devspace.yaml 根配置 versions: ingress: networking.k8s.io/v1
- 所有Ingress路径必须配置
pathType字段(v1版本Ingress必填参数),可选值为Prefix/Exact/ImplementationSpecific,示例配置:
# 若使用组件级Ingress配置,需补充pathType components: - name: frontend ingress: rules: - host: dev.your-domain.local paths: - path: / pathType: Prefix servicePort: 3000
- 配置修改完成后执行
devspace render验证生成的Ingress资源版本、路径、service关联信息是否正确,也可通过kubectl logs -n ingress-nginx deploy/ingress-nginx-controller查看controller日志排查其他路由错误。
问题2:配置全局统一Ingress的方案
DevSpace默认会为每个配置了ingress字段的组件生成独立Ingress资源,实现全局统一Ingress可选择以下两种方案:
方案1:加载自定义Ingress原生清单(最稳定,兼容原有Skaffold配置逻辑)
- 将你之前正常运行的
networking.k8s.io/v1版本Ingress清单保存为项目内的单独文件,例如./k8s/global-ingress.yaml - 在
devspace.yaml中配置加载该自定义清单,同时删除所有组件配置中的ingress字段,避免自动生成多余的Ingress资源:
manifests: - path: ./k8s/*.yaml
方案2:使用DevSpace全局Ingress配置(无需额外维护独立清单)
直接在devspace.yaml根级别配置统一的ingress段,而非在每个组件下分别配置,DevSpace只会生成一个全局Ingress资源:
# devspace.yaml 根级别全局Ingress配置 ingress: name: global-app-ingress apiVersion: networking.k8s.io/v1 rules: - host: dev.your-domain.local paths: - path: / pathType: Prefix serviceName: frontend servicePort: 3000 - path: /api pathType: Prefix serviceName: backend-api servicePort: 8080 - path: /admin pathType: Prefix serviceName: admin-service servicePort: 80
内容的提问来源于stack exchange,提问作者strumpy_strudel
相关产品推荐
相关产品推荐

