如何在Kubernetes secrets中生成随机字符串/密码

如何在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 但这既不安全也不方便(如果我需要另一个应用程序实例,我必须使用人工生成的密码创建另一个文件) 我希望在应用程序创建时生成随机密码

现在,我使用静态文件部署我的应用程序pod,其中一个是
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=-