使用yaml配置自动为秘密生成的字符串

时间:2018-01-29 07:51:14

标签: 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...

部署文件受源代码管理,所以我不想把秘密放在那里。

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

2 个答案:

答案 0 :(得分:3)

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

我认为有一种方法可以使用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

运行此脚本。

希望它对您有用

答案 1 :(得分:0)

您也可以使用open ssl

openssl rand -base64 32

或者如果您需要纯文本/数字:

openssl rand -base64 32 | tr -cd '[:alpha:]\n'

或者,如果您不希望尾随CR:

openssl rand -base64 32 | tr -cd '[:alpha:]'

请注意,任何长于-base64 48的内容都可能会将CR添加到输出中。调整您的tr的味道,例如

openssl rand -base64 128 | tr -cd '[:alpha:]'

将串联来自openssl的多行,但也省略尾随\n