kubectl patch更新Ingress资源提示无变更,遗漏了什么配置?
原因分析
- 核心问题是Ingress API版本差异导致的字段结构不匹配
你最初参考的Ingress配置使用的是已废弃的extensions/v1beta1版本API,Kubernetes 1.19及之后版本中Ingress的正式GA版本为networking.k8s.io/v1,该版本对backend字段结构做了破坏性调整:
旧版本(extensions/v1beta1)结构:
backend: serviceName: node-app-blue-helm-chart servicePort: 80
新版本(networking.k8s.io/v1)结构:
backend: service: name: node-app-blue-helm-chart port: number: 80
你执行patch时指定的路径/spec/rules/0/http/paths/0/backend/serviceName在新版本的Ingress资源结构中不存在,无法匹配到对应字段修改,因此返回无变更提示。
解决方法
- 先确认集群中Ingress的实际字段结构,执行以下命令输出完整YAML:
kubectl get ingress ingress-resource -o yaml
- 根据实际结构调整patch命令,若为
networking.k8s.io/v1版本,正确的替换命令为:
kubectl patch ingress ingress-resource --type=json \ -p='[{"op": "replace", "path": "/spec/rules/0/http/paths/0/backend/service/name", "value":"node-app-green-helm-chart"}]'
其他可能原因
如果调整patch命令后仍然不生效,可检查是否存在GitOps工具(如Argo CD、Flux)配置了该Ingress的自动同步,手动修改的内容会被工具自动回滚为仓库中存储的版本。
内容的提问来源于stack exchange,提问作者bcan
相关产品推荐
相关产品推荐

