使用 yaml 配置自动生成机密字符串

Rot*_*eti 6 kubernetes

我有一个应用程序的部署配置,它(除其他外)为 mysql 数据库创建一个秘密:

---
apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
type: Opaque
data:
  MYSQL_USER: my_user
  MYSQL_PASSWORD: my_random_secret
  MYSQL_DATABASE: my_db
  MYSQL_ROOT_PASSWORD: my_random_secret
---
etc...
Run Code Online (Sandbox Code Playgroud)

部署文件受源代码控制,因此我不想将机密放在那里。

my_random_secret有谁知道我如何告诉 Kubernetes 为每个在我的示例中具有值的变量生成随机字符串?最好可以使用 yaml 文件进行配置,而无需调用任何额外的命令。

aer*_*ite 7

据我了解,您不想在本地保存您的秘密信息。因此,您需要在创建该秘密时生成它们。

我认为有一种方法可以使用 go-template 创建 Kubernetes 资源。没有找到足够的信息。我无法以这种方式帮助你。

但您也可以使用脚本创建秘密。而且你的秘密也不会被泄露。

在这种情况下,以下脚本可以帮助您。这将为您生成随机密码,并用该密码创建秘密。

cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
type: Opaque
data:
  MYSQL_PASSWORD: $(head -c 24 /dev/random | base64)
  MYSQL_ROOT_PASSWORD: $(head -c 24 /dev/random | base64)
stringData:
  MYSQL_USER: my_user
  MYSQL_DATABASE: my_db
EOF
Run Code Online (Sandbox Code Playgroud)

运行这个脚本。

希望它对你有用

  • 不要使用当前时间作为秘密(加密密钥、密码等)的唯一熵源!经过哈希处理后,此类密码*看起来*像一个强 32 字符密码,但实际熵保持非常低,每秒 1 个选项。例如,如果攻击者知道运行的日期和时间,则只有 3600 个可能的密码可供尝试。始终从“加密安全”来源创建秘密。类似“head -c 24 /dev/random |”的东西 base64` 是一个更好的开始。 (6认同)