我需要提取TeamCity中定义的密码值。当前,我使用secrets.yaml来存储密码。为了实现它,我已经将密码转换为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。这是我目前得到的输出。
是否可以这样定义数据
CassandraSettings__CassandraPassword: [[ .Environment ]]-abc-cassandra-password
据我了解,您可能需要使用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