5

现在,我使用静态文件部署我的应用程序 pod,其中一个包含app-secrets.yaml部署应用程序的所有机密

---
apiVersion: v1
kind: Secret
metadata:
  name: app-secrets
type: Opaque
data:
  root: xxxxxx
  user1: xxxxxx
  user2: xxxxxx

但这既不安全也不方便(如果我需要另一个应用程序实例,我必须使用人工生成的密码创建另一个文件)。

我希望在创建应用程序时生成随机密码,但我不知道这是否可能。我已经查看了主题秘密,特别是secretGenerator但这并不是我所理解的直接想要的,因为它不会创建随机字符串,而是创建随机秘密名称,secret/app-secrets-ssdsdfmfh4k但我仍然必须提供密码。

4

4 回答 4

2

您可能想要使用kubernetes-secret-generator。我已经对其进行了测试,它正在做你所需要的。

要完成它,您必须在集群中安装 helm 并按照以下说明进行操作:

克隆存储库

$ git clone https://github.com/mittwald/kubernetes-secret-generator

创建 helm 部署

$ helm upgrade --install secret-generator ./deploy/chart

现在你要使用它,你只需要

secret-generator.v1.mittwald.de/autogenerate向任何 Kubernetes 密钥对象添加注解。注解的值可以是密钥中的字段名称(或逗号分隔的字段名称列表);SecretGeneratorController 将获取此注释并将一个字段[或字段](password在下面的示例中)添加到具有随机生成的字符串值的密钥中。从这里

$ kubectl apply -f mysecret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
  annotations:
    secret-generator.v1.mittwald.de/autogenerate: password
data:
  username: UGxlYXNlQWNjZXB0Cg==

应用此密码后,您可以查看它以检查密码是否按预期生成:

$ 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

如我们所见,密码已生成,并根据您的需要进行了加密。

于 2020-01-09T14:33:19.330 回答
2

你也可以这样做:

$ head /dev/urandom | tr -dc A-Za-z0-9 | head -c 8 ; echo '' | base64 | kubectl create secret generic mysecret --from-literal=password=-

不方便的是每次运行命令时都需要更改密码名称,但看起来您已经有了生成随机密码名称的机制。

注意:更改数字head -c 8以控制字符串的长度。

于 2020-01-10T09:34:30.177 回答
1

Kubernetes 本身没有这个功能。

如果您想自己手动执行此操作,请查看此问题

如果您想自动执行此手动任务,则可以使用此自定义控制器来执行此操作。

将注释 secret-generator.v1.mittwald.de/autogenerate 添加到任何 Kubernetes 机密对象。注释的值可以是秘密中的字段名称(或逗号分隔的字段名称列表);SecretGeneratorController 将获取此注释并将一个字段[或字段](以下示例中的密码)添加到具有随机生成的字符串值的秘密

于 2020-01-09T14:34:48.703 回答
0

为了背上@suren的回答,这就是今天应该做的事情

如果你想空跑,

head /dev/urandom | tr -dc A-Za-z0-9 | head -c 8 | kubectl create secret generic xxx --dry-run=client --from-file=password=/dev/stdin -o json

要创建秘密和解码,

head /dev/urandom | tr -dc A-Za-z0-9 | head -c 8 | kubectl create secret generic xxx --from-file=password=/dev/stdin

kubectl get secret xxx -o jsonpath='{.data.password}' | base64 -d
于 2022-02-03T03:52:36.723 回答