如何使用kubectl修改kube配置文件中的用户名?



如何使用kubectl(无文本编辑器)更改kube配置文件中用户的name?

示例kube配置文件stage_config.yaml:

apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://127.0.0.1:6443
name: cluster.local
contexts:
- context:
cluster: cluster.local
user: kubernetes-admin
name: kubernetes-admin@cluster.local
current-context: kubernetes-admin@cluster.local
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED

我想写kubectl config rename-user --kubeconfig ~/.kube/stage_config.yaml kubernetes-admin kubernetes-admin-1

输出如下:

apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://127.0.0.1:6443
name: cluster.local
contexts:
- context:
cluster: cluster.local
user: kubernetes-admin
name: kubernetes-admin@cluster.local
current-context: kubernetes-admin@cluster.local
kind: Config
preferences: {}
users:
- name: kubernetes-admin-1
user:
client-certificate-data: REDACTED
client-key-data: REDACTED

我已经尝试了kubectl config set,但收到以下错误:

kubectl config set --kubeconfig ~/.kube/stage_config.yaml users.name.kubernetes-admin kubernetes-admin-1
error: can't set a map to a value: map[kubernetes-admin:0xc000c53100]

kubectl config --help表示存在rename-context命令,但不存在类似rename-userrename-cluster的命令。

使用JQ来完成这个魔术(只要确保你的kubecconfig是JSON格式)。我肯定是可以做到这一点与YQ为YAML,但我让别人填补这一个。设置CLUSTER_NAME为您想要的值。

jq '.clusters[0].name="'$CLUSTER_NAME'" | .contexts[0].context.cluster="'$CLUSTER_NAME'"' source/kubeconfig > target/kubeconfig

最新更新