我有一个应用程序的部署配置,(除其他外)为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文件配置的东西,而不需要调用任何额外的命令。
答案 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