【发布时间】:2021-12-27 17:01:05
【问题描述】:
我有一个 k8s 秘密 yaml 定义,其中一些数据项已经应用到集群中。从 yaml 文件中删除一些数据项,并使用 kubectl apply 更新秘密后,这些删除的数据项仍然保留在 k8s 集群中存在的秘密对象中,如果不从头删除并重新创建秘密,则无法删除它们。但是,这不是通常的行为,只会在极少数情况下发生。知道为什么会发生这种情况吗?如何在不删除整个秘密的情况下修复它?
例子:
$ cat <<EOF|kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: db-credentials-secret
namespace: default
type: Opaque
stringData:
user: foo
password: bar
EOF
秘密是使用数据项user 和password 创建的。
$ cat <<EOF|kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: db-credentials-secret
namespace: default
type: Opaque
stringData:
password: bar
EOF
从秘密定义中删除user 后,秘密将更新为kubectl apply,但user 数据项仍保留在秘密中。
【问题讨论】:
-
kubectl -n default get secret db-credentials-secret -o yaml向您展示了什么? -
它向我显示了包含所有数据项(包括用户和密码)的秘密定义,即使
password应该已被删除。此外,它还包括每个 k8s 对象所具有的resourceVersion、selfLink和uuid字段。 -
您使用的是哪个版本的 Kubernetes,您是如何设置集群的?您是否使用裸机安装或某些云提供商?重现您的问题很重要。
-
@MikołajGłodziak Kubernets 版本是 1.19,集群是 Amazon EKS 设置。
-
您正在使用已弃用的 Kubernetes 版本。你能更新到最新的吗?
标签: kubernetes kubernetes-secrets