我想重命名我的k8s Secrets并想检查是否有未使用的Secrets。我也想知道引用了containers的数量和哪个Secret

有比在所有部署中搜索 secret 名称更简单的方法吗?

最佳答案

谢谢西蒙。根据您的回答,我创建了一个差异,该差异显示了容器env部分中未引用的secretsSecrets也可以在以下位置引用:

入口的

  • TLS部分
  • Pods Volumes规范,就像Simon提到的
  • 私有(private)存储库的
  • ImagePullSecrets
  • CRDs定制资源定义

  • 但是对我来说,找到在环境变量中未引用的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)
    
    更新2018年4月16日
    我创建了一个更高级的版本,以查找volumesingress tlsimagePullSecrets中引用的 secret 。以下代码段将向您显示当前 namespace 的所有未使用的secrets
    警告:该脚本未涵盖可以引用 secret 的所有选项(例如,自定义资源定义)。
    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)
    

    关于kubernetes - 如何识别Kubernetes中未使用的 secret ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46406596/

    10-11 02:46