我想重命名我的k8 Secrets
,并想检查是否有未使用的Secrets
。另外,我想知道有多少containers
引用Secret
。
有没有比在所有部署中搜索机密名称更简单的方法?
答案 0 :(得分:6)
谢谢西蒙。根据你的回答,我创建了一个diff,它显示了容器env部分中没有引用的secrets
。 Secrets
也可以在以下网址中引用:
TLS
部分Pods
Volumes
规范,就像Simon提到的那样ImagePullSecrets
私人存储库但对我来说,找到未在环境变量中引用的secrets
就足够了:
diff \
<(kubectl get pods -o jsonpath='{.items[*].spec.containers[*].env[*].valueFrom.secretKeyRef.name}' | xargs -n1 | sort | uniq) \
<(kubectl get secrets -o jsonpath='{.items[*].metadata.name}' | xargs -n1 | sort | uniq)
更新16.04.2018
我创建了一个更高级的版本,以查找volumes
,ingress tls
和imagePullSecrets
中引用的机密信息。此代码段将显示当前命名空间的所有未使用的secrets
:
envSecrets=$(kubectl get pods -o jsonpath='{.items[*].spec.containers[*].env[*].valueFrom.secretKeyRef.name}' | xargs -n1)
volumeSecrets=$(kubectl get pods -o jsonpath='{.items[*].spec.volumes[*].secret.secretName}' | xargs -n1)
pullSecrets=$(kubectl get pods -o jsonpath='{.items[*].spec.imagePullSecrets[*].name}' | xargs -n1)
tlsSecrets=$(kubectl get ingress -o jsonpath='{.items[*].spec.tls[*].secretName}' | xargs -n1)
diff \
<(echo "$envSecrets\n$volumeSecrets\n$pullSecrets\n$tlsSecrets" | sort | uniq) \
<(kubectl get secrets -o jsonpath='{.items[*].metadata.name}' | xargs -n1 | sort | uniq)
答案 1 :(得分:1)
没有预定的方法来列出未使用的秘密,因为Secrets本身不包含使用参考。一种解决方案是将所有容器/容器解析为使用秘密作为装载和环境变量来匹配您的秘密列表。 kubectl get
支持JSONPath,并且非常简单:
kubectl get pods --all-namespaces -o jsonpath='{.items[*].spec.volumes[*].secret.secretName}' | xargs -n1 | uniq
kubectl get pods --all-namespaces -o jsonpath='{.items[*].spec.containers[*].env[*].valueFrom.secretKeyRef.name}' | xargs -n1 | uniq