检查哪个部署(如果有)正在使用秘密

Check which deployment (if any) is using a secret

我正在替换一个 Kubernetes 秘密,我想确保我捕获了集群中所有使用它的地方。

有没有一种方法可以在不阅读所有使用 K8s 或 helm 的部署 YAML 的情况下判断?

我们在同一个集群上部署了多项服务并共享机密。一些使用 Helm,一些不使用。

您可以通过几种不同的方式使用机密,它并不总是绑定为卷。因此,最方便的方法是检查秘密的命名空间,以查找所有可以在其规范中使用秘密的对象。

这里有两个命令用于手动检查,一个用于检查 k8s 对象中的某些秘密名称引用,第二个用于查找包含秘密引用的对象。

kubectl get deployments,statefulsets,daemonsets,cronjobs,jobs,pods -n namespace-name -o yaml | grep  secret_name

kubectl get deployments,statefulsets,daemonsets,cronjobs,jobs,pods -n namespace-name -o yaml | grep -i -e "^ name:"  -e "^  kind" -e secret_name

注释可以通过 grep -v annotation -v last-applied 删除,或者可能更容易 grep -v "\"kind"

我使用了 Jakub 的答案并做了一些修改,以更好地生成使用特定秘密名称的部署和 cronjobs 的名称列表

这需要 jq 才能运行

kubectl get deployments,cronjobs -o json | jq '.items[]|select(.spec.template.spec.containers[]?.env[]?.valueFrom.secretKeyRef.name == "NAME_OF_SECRET") | .metadata.name'