如何在Kubernetes secrets中生成随机字符串/密码
现在,我使用静态文件部署我的应用程序pod,其中一个是如何在Kubernetes secrets中生成随机字符串/密码,kubernetes,kubernetes-secrets,Kubernetes,Kubernetes Secrets,现在,我使用静态文件部署我的应用程序pod,其中一个是appsecrets.yaml,包含部署应用程序的所有机密 --- apiVersion: v1 kind: Secret metadata: name: app-secrets type: Opaque data: root: xxxxxx user1: xxxxxx user2: xxxxxx 但这既不安全也不方便(如果我需要另一个应用程序实例,我必须使用人工生成的密码创建另一个文件) 我希望在应用程序创建时生成随机密码
appsecrets.yaml
,包含部署应用程序的所有机密
---
apiVersion: v1
kind: Secret
metadata:
name: app-secrets
type: Opaque
data:
root: xxxxxx
user1: xxxxxx
user2: xxxxxx
但这既不安全也不方便(如果我需要另一个应用程序实例,我必须使用人工生成的密码创建另一个文件)
我希望在应用程序创建时生成随机密码,但我不知道这是否可行。
我已经看过了这个主题,尤其是secretGenerator
,但据我所知,这并不是我想要的,因为它不会创建一个随机字符串,而是一个随机的秘密名称,比如secret/app-secrets-ssdsdfmfh4k
,但我仍然需要提供密码。您可能需要使用。我已经测试过了,它完全符合你的需要
要完成此任务,您必须在集群中拥有头盔,并遵循以下说明:
克隆存储库
$ git clone https://github.com/mittwald/kubernetes-secret-generator
创建舵部署
$ helm upgrade --install secret-generator ./deploy/chart
现在你要使用它,你只需要
将注释secret generator.v1.mittwald.de/autogenerate
添加到任何
Kubernetes秘密对象。批注的值可以是字段
机密中的名称(或以逗号分隔的字段名称列表);这个
SecretGeneratorController将拾取此注释并添加一个字段
[或字段](密码
,在下面的示例中)使用
随机生成的字符串值。从
应用此秘密后,您可以查看它,以检查passward是否按预期生成:
$ kubectl get secrets mysecret -o yaml
apiVersion: v1
data:
password: dnVKTDBJZ0tFS1BacmtTMnBuc3d2YWs2YlZsZ0xPTUFKdStDa3dwUQ==
username: UGxlYXNlQWNjZXB0Cg==
kind: Secret
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","data":{"username":"UGxlYXNlQWNjZXB0Cg=="},"kind":"Secret","metadata":{"annotations":{"secret-generator.v1.mittwald.de/autogenerate":"password"},"name":"mysecret","namespace":"default"}}
secret-generator.v1.mittwald.de/autogenerate: password
secret-generator.v1.mittwald.de/autogenerate-generated-at: 2020-01-09 14:29:44.397648062
+0000 UTC m=+664.011602557
secret-generator.v1.mittwald.de/secure: "yes"
creationTimestamp: "2020-01-09T14:29:44Z"
name: mysecret
namespace: default
resourceVersion: "297425"
selfLink: /api/v1/namespaces/default/secrets/mysecret
uid: 7ae42d71-32ec-11ea-92b3-42010a800009
type: Opaque
正如我们所看到的,密码是生成的,并根据需要进行加密 Kubernetes本机不具备此功能 如果您想自己手动执行此操作,请签出此 如果要自动执行此手动任务,则可以使用此自定义来执行此任务 将注释secret-generator.v1.mittwald.de/autogenerate添加到任何Kubernetes秘密对象。注释的值可以是机密中的字段名(或以逗号分隔的字段名列表);SecretGeneratorController将拾取此注释,并使用随机生成的字符串值向机密添加一个字段[或多个字段](下例中为密码)您也可以这样做:
$ head /dev/urandom | tr -dc A-Za-z0-9 | head -c 8 ; echo '' | base64 | kubectl create secret generic mysecret --from-literal=password=-
不方便的是,每次运行命令时都需要更改机密名称,但看起来您已经有了生成随机机密名称的机制
注意:更改
head-c8
中的数字以控制字符串的长度。这正是我想要的,不幸的是k8s在默认情况下没有提供,并且该项目使用helm进行部署。
$ head /dev/urandom | tr -dc A-Za-z0-9 | head -c 8 ; echo '' | base64 | kubectl create secret generic mysecret --from-literal=password=-