Kubernetes中Ingress名字(metadata.name是不可直接修改

Kubernetes (k8s) 中,Ingress(和大多数资源一样)名字(metadata.name)是不可变的,不能直接修改


方案 1:导出现有 Ingress → 修改 → 重新创建

1
2
3
4
5
6
7
8
9
10
11
12
# 导出现有 ingress 配置
kubectl get ingress old-ingress-name -n your-namespace -o yaml > ingress.yaml

# 编辑 ingress.yaml
# 1. 修改 metadata.name: new-ingress-name
# 2. 删除 metadata.uid、resourceVersion、creationTimestamp 等字段

# 应用新配置
kubectl apply -f ingress.yaml

# 删除旧的 ingress
kubectl delete ingress old-ingress-name -n your-namespace

方案 2:一行命令复制

利用 kubectl get ... | kubectl apply -f -,可以少写临时文件:

1
2
3
4
5
6
kubectl get ingress old-ingress-name -n your-namespace -o yaml \
| sed 's/name: old-ingress-name/name: new-ingress-name/' \
| grep -v "uid:" \
| grep -v "resourceVersion:" \
| grep -v "creationTimestamp:" \
| kubectl apply -f -

然后再删除旧的:

1
kubectl delete ingress old-ingress-name -n your-namespace

方案 3:借助 Helm / Kustomize

如果你的 ingress 是由 Helm chartKustomize 管理的,不要直接 kubectl apply,而是:

  • 修改 values.yaml / kustomization.yaml 中的 name
  • 重新部署

这样可以保持和后续 CI/CD 流程一致。


总结
Ingress 名字不能直接 kubectl edit 修改,只能 重新创建一个新的资源(复制配置 + 删除旧的)。