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

Kubernetes 1.20环境下Ingress从networking.k8s.io/v1beta升级至v1后出现注册错误的技术求助

问题分析与解决方案

首先咱们拆解下你遇到的错误核心:

ComparisonError: failed to convert *unstructured.Unstructured to *v1beta1.Ingress: no kind "Ingress" is registered for version "networking.k8s.io/v1" in scheme "pkg/runtime/scheme.go:101"

这个错误说明有组件(可能是Helm客户端、集群内的Ingress控制器,或是你本地的K8s工具链)仍在依赖旧的networking.k8s.io/v1beta1 API Schema,无法识别新的v1版本Ingress资源。再加上你只修改了配置文件但没执行helm upgrade,集群里实际运行的Ingress还是旧版本,这就加剧了版本不匹配的冲突。

结合你的Kubernetes 1.20版本(该版本中networking.k8s.io/v1已是Ingress的稳定版),咱们一步步解决问题:

1. 对齐客户端版本(Kubectl + Helm)

旧版本的Kubectl或Helm可能不支持networking.k8s.io/v1的Ingress类型,先检查并适配:

  • 检查Kubectl版本:执行 kubectl version --short,确保客户端版本和集群的1.20.x差距不超过1个小版本(比如1.19.x到1.21.x之间都可),版本过旧则升级。
  • 检查Helm版本:执行 helm version,建议使用Helm 3.3及以上版本(该版本开始全面支持K8s 1.20的v1 Ingress)。

2. 执行Helm Upgrade更新集群内Ingress资源

你已经修改了ingress.yaml的apiVersion,但没执行升级,集群里的Ingress资源仍停留在v1beta1版本,这是关键遗漏步骤。执行以下命令完成更新:

helm upgrade {{ .Release.Name }} <你的Chart路径> -f <你的Values文件路径>

将命令中的占位符替换为你实际的Release名称、Chart路径和Values文件路径。

3. 验证Ingress Controller版本(以NGINX为例)

你使用的是NGINX Ingress Controller,需要确保它的版本支持networking.k8s.io/v1。K8s 1.20对应的NGINX Ingress Controller至少需要**0.44.0+**版本(从该版本开始原生支持v1 API)。

  • 检查控制器版本:
kubectl get pods -n <Ingress控制器所在命名空间> -o jsonpath='{.items[*].metadata.labels.app\.kubernetes\.io/version}'

如果版本低于0.44.0,需升级NGINX Ingress Controller到适配版本。

4. 确认Ingress资源已成功升级

执行完helm upgrade后,检查集群内的Ingress资源版本是否切换到v1:

kubectl get ingress {{ .Release.Name }}-ingress -o yaml | grep apiVersion

输出若显示networking.k8s.io/v1,说明资源已更新完成。

额外注意点

  • 如果你有自定义Operator或业务控制器在处理Ingress资源,需确保这些组件的代码已导入networking.k8s.io/v1的Ingress包,并且在Scheme中注册了该类型(否则会继续出现类似转换错误)。
  • 你的ingress.yaml配置完全符合v1规范(比如正确使用了pathType、backend.service的嵌套结构),这部分无需调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:07:30