首页 > 解决方案 > 如何在 Bash 脚本中使用 Kubernetes Secret

问题描述

我在 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)

但我面临的问题是上述命令将返回两个键值对而不是值。

标签: bashkubernetessh

解决方案


如果它是一个环境变量,你可以使用普通的 Bourne shell参数扩展语法:

kubectl exec pod_name -- sh -c 'echo $SFTP_PASSWORD'

注意单引号,防止本地shell扩展参数;包装器,sh -c以便启动远程外壳来进行参数扩展;在这种非交互式使用中,这些-it选项是不必要的。

您的集群管理员可能会禁止kubectl exec, 以防止以这种方式将机密值复制出集群。这也避免了非标准printenv工具(它是 GNU Coreutils 的一部分,而不是 POSIX 规范,因此基于 Alpine 的图像可能没有它)。


推荐阅读