Как сгенерировать случайную строку / пароль в секретах Kubernetes - PullRequest
1 голос
/ 09 января 2020

На данный момент я развертываю свои модули приложений, используя файлы * stati c, и один из них - app-secrets.yaml со всеми секретами для развертывания приложения

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

, но это не является ни безопасным, ни удобным ( если мне нужен еще один экземпляр приложения, мне нужно создать еще один файл с паролем, созданным человеком).

Я пытаюсь сгенерировать случайные пароли при создании приложения, но не знаю, возможно ли это. Я уже посмотрел на topi c secret и особенно secretGenerator, но это не совсем то, что я хочу, насколько я понимаю, потому что он создает не случайную строку, а случайное секретное имя, подобное secret/app-secrets-ssdsdfmfh4k но я должен предоставить еще пароли.

Ответы [ 3 ]

1 голос
/ 09 января 2020

У Kubernetes изначально нет этой функциональности.

Если вы хотите выполнить это самостоятельно, проверьте этот вопрос

Если вы хотите автоматизировать эту ручную задачу, вы можете использовать этот пользовательский контроллер для этого.

Добавьте аннотацию secret-generator.v1.mittwald.de/autogenerate к любому секретному объекту Kubernetes. Значением аннотации может быть имя поля (или список имен полей, разделенных запятыми) внутри секрета; SecretGeneratorController подберет эту аннотацию и добавит поле [или поля] (пароль в приведенном ниже примере) к секрету со случайно сгенерированным строковым значением

1 голос
/ 09 января 2020

Вы можете использовать kubernetes-secret-generator . Я проверил это, и он делает именно то, что вам нужно.

Чтобы выполнить sh, у вас должен быть 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

Как мы видим, пароль сгенерирован и зашифрован так, как вам нужно.

0 голосов
/ 10 января 2020

Вы также можете сделать это:

$ 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, чтобы контролировать длину строки.

...