Любые другие варианты получения паролей без декодирования из teamcity - PullRequest
1 голос
/ 30 января 2020

Мне нужно получить значение паролей, которое было определено в TeamCity. В настоящее время я использовал для сохранения паролей секретный файл. для его реализации я преобразовал пароль в значение 64-битного кода. и сохранить его. кажется, мне очень трудно обновлять его каждый раз. Есть ли у нас какие-либо варианты для его динамического обновления?

Первое, что я пробовал вот так:

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
data:
  CassandraSettings__CassandraPassword: [[ .Environment ]]-abc-cassandra-password

, но во время развертывания происходит сбой. позже я попробовал вот так, здесь я преобразовал пароль в 64-битное закодированное значение.

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
data:
  CassandraSettings__CassandraPassword: S2V5czJUaGVLMW5nZDBt

на данный момент я получаю результат.

мой вопрос в том, есть ли у нас какие-либо Другой вариант для извлечения значения из TeamCity во время развертывания без преобразования значений. Мне нужно динамически обновлять secrets.yaml. Это вывод, который я получаю в настоящее время. results

возможно ли определить данные следующим образом

CassandraSettings__CassandraPassword: [[ .Environment ]]-abc-cassandra-password

1 Ответ

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

Как я понимаю, вместо data вам нужно работать с stringData, что позволит вам предоставлять секретные данные в виде некодированных строк.

stringData - это удобное поле только для записи который не выводится при получении секретов

Пример :

secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: mysecret-test
stringData:
  CassandraSettings__CassandraPassword: Passw0rd

Создать секрет

$ kubectl create -f secret.yaml
secret/mysecret-test created

$ kubectl describe secrets mysecret-test
Name:         mysecret-test
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
CassandraSettings__CassandraPassword:  8 bytes

Извлечь секретный yaml и ЗАМЕТИТЬ, что поле данных зашифровано для вас base64 .

$ kubectl get secrets mysecret-test -o yaml

apiVersion: v1
data:
  CassandraSettings__CassandraPassword: UGFzc3cwcmQ=
kind: Secret
metadata:
  creationTimestamp: "2020-01-30T13:24:11Z"
  name: mysecret-test
  namespace: default
  resourceVersion: "3733024"
  selfLink: /api/v1/namespaces/default/secrets/mysecret-test
  uid: 718278c5-0e8e-4861-ae23-7e107209c338
type: Opaque

Значение поля кодированных данных такое же, как и переданное поле stringData быстрая проверка, как показано ниже

$ echo UGFzc3cwcmQ= | base64 -d
Passw0rd

Или используйте императивную команду , например, для генерации secret.yaml с закодированным значением переданного литерала. Ниже я определил один из литералов как переменную экспорта для теста.

$ export PASS=Passw0rd

$ echo $PASS
  Passw0rd

$ kubectl create secret generic mysecret --from-literal=CassandraSettings__CassandraPassword=$PASS--dry-run -o yaml > secret.yaml

$ cat secret.yaml
apiVersion: v1
data:
  CassandraSettings__CassandraPassword: UGFzc3cwcmQ=
kind: Secret
metadata:
  creationTimestamp: null
  name: mysecret
...