如何将已部署Ingress的apiVersion从extensions/v1beta1升级至networking.k8s.io/v1?
解决Ingress从extensions/v1beta1升级到networking.k8s.io/v1的配置问题
嘿,我来帮你搞定这个Ingress版本升级的问题!你遇到的验证错误并不是serviceName和servicePort本身写法错了——而是networking.k8s.io/v1版本的Ingress对后端服务的配置格式做了彻底调整,旧的字段已经不被支持了。
错误原因解析
从Kubernetes 1.19开始正式推荐使用networking.k8s.io/v1的Ingress API,这个版本和旧的extensions/v1beta1相比,最大的变化之一就是后端服务的定义方式:
- 旧版本直接用
serviceName和servicePort字段 - 新版本要求把后端服务嵌套在
service字段下,并且port需要明确指定是number(端口号)还是name(端口名称)
正确的配置片段
把你当前YAML里的paths部分改成下面这样:
spec: rules: - host: your-hostname-here # 替换成你的实际域名 http: paths: - backend: service: name: location # 对应原来的serviceName port: number: 80 # 对应原来的servicePort,这里用number指定端口号 path: / pathType: ImplementationSpecific
如果你的服务端口是用名称定义的(比如在Service里给端口起了名字),也可以用name来指定:
port: name: http-port # 替换成你Service里的端口名称
操作步骤建议
- 先导出当前Ingress的配置到本地文件:
kubectl get ingress current-ingress -o yaml > ingress.yaml - 在本地文件里修改
apiVersion为networking.k8s.io/v1,同时按照上面的格式调整后端服务配置 - 验证配置是否正确:
kubectl apply --dry-run=client -f ingress.yaml - 确认没问题后再应用到集群:
kubectl apply -f ingress.yaml
或者你也可以直接用kubectl edit ingress current-ingress,修改后保存即可——这次应该不会再出现验证错误了。
额外说明
你的集群Server版本是v1.19.9,完全支持networking.k8s.io/v1的Ingress API,所以不用担心版本兼容性问题。另外,pathType字段是v1版本要求的必填项,你已经设置了ImplementationSpecific,这个是没问题的(如果是匹配所有路径,也可以用Prefix或者Exact,根据你的需求调整)。
内容的提问来源于stack exchange,提问作者Sandeep Reddy
相关产品推荐
相关产品推荐

