我有一个存储在 Kubernetes pod 中的秘密,可以通过以下命令访问。
kubectl exec -it pod_name -- printenv | grep SFTP_PASSWORD
这将提供输出为
SFTP_PASSWORD=password
我正在 bash 脚本中访问这个秘密。
sftp_password=$(kubectl exec -it pod_name -- printenv | grep SFTP_PASSWORD)
但是我面临的问题是上面的命令将返回两个键值对而不是值。
如果是环境变量,你可以只使用普通的 Bourne shell 参数扩展语法:
kubectl exec pod_name -- sh -c 'echo $SFTP_PASSWORD'
请注意单引号,以防止本地 shell 扩展参数;sh -c
包装器,以便启动远程 shell 来执行参数扩展;在这种非交互式使用中,-it
选项是不必要的。
群集管理员可能禁止kubectl exec
,以防止以这种方式将机密值复制到群集之外。 这也避免了非标准的printenv
工具(它是GNU Coreutils的一部分,而不是POSIX规范,所以基于Alpine的镜像可能没有它)。