如何嵌入 JSON 字符串作为 Kubernetes Secret 中的值
How to embed JSON string as the value in a Kubernetes Secret
我们的部分编排使用 envsubst 来使用我们想要的值更新 YAML 模板文件。
envsubst < "${SECRET_TEMPLATE}" | kubectl apply -f -
我们的关键字配置的值是一个 JSON 字符串:
data=$(jq -c . ${JSON_FILE})
这导致 YAML 看起来像这样(为简洁起见进行了修剪):
apiVersion: v1
kind: Secret
metadata:
name: reporting-config
type: Opaque
data:
config: {"database": "foo"}
这显然适用于 Kube 的一些早期版本,我想说的是 1.8。无论如何,我们是 运行 1.15,现在 kubectl 将其解释为地图类型并抱怨:
error: error validating "STDIN": error validating data: ValidationError(Secret.data.config): invalid type for io.k8s.api.core.v1.Secret.data: got "map", expected "string"; if you choose to ignore these errors, turn validation off with --validate=false
现在有什么技巧可以做到这一点吗?我尝试过引用和各种地方、转义引号以及所有爵士乐和虚无主义。
* 更新 1 *
使用 stringData 仍然会导致相同的错误:
apiVersion: v1
kind: Secret
metadata:
name: monsoon-storage-reporting-config
type: Opaque
stringData:
config: {"database": "foo"}
error: error validating "STDIN": error validating data: ValidationError(Secret.stringData.config): invalid type for io.k8s.api.core.v1.Secret.stringData: got "map", expected "string"; if you choose to ignore these errors, turn validation off with --validate=false
我必须对值进行 base64 编码
$ echo {"database": "foo"} | base64
e2RhdGFiYXNlOiBmb299Cg==
然后在data:
字段中使用base64编码值
apiVersion: v1
kind: Secret
metadata:
name: reporting-config
type: Opaque
data:
config: e2RhdGFiYXNlOiBmb299Cg==
另请注意 base64 encoding:
When using the base64 utility on Darwin/macOS users should avoid using the -b option to split long lines. Conversely Linux users should add the option -w 0 to base64 commands or the pipeline base64 | tr -d '\n' if -w option is not available.
您可以使用如下的 stringData。注意 stringData 之后的管道:
apiVersion: v1
kind: Secret
metadata:
name: monsoon-storage-reporting-config
type: Opaque
stringData: |
config: {"database": "foo"}
我们的部分编排使用 envsubst 来使用我们想要的值更新 YAML 模板文件。
envsubst < "${SECRET_TEMPLATE}" | kubectl apply -f -
我们的关键字配置的值是一个 JSON 字符串:
data=$(jq -c . ${JSON_FILE})
这导致 YAML 看起来像这样(为简洁起见进行了修剪):
apiVersion: v1
kind: Secret
metadata:
name: reporting-config
type: Opaque
data:
config: {"database": "foo"}
这显然适用于 Kube 的一些早期版本,我想说的是 1.8。无论如何,我们是 运行 1.15,现在 kubectl 将其解释为地图类型并抱怨:
error: error validating "STDIN": error validating data: ValidationError(Secret.data.config): invalid type for io.k8s.api.core.v1.Secret.data: got "map", expected "string"; if you choose to ignore these errors, turn validation off with --validate=false
现在有什么技巧可以做到这一点吗?我尝试过引用和各种地方、转义引号以及所有爵士乐和虚无主义。
* 更新 1 *
使用 stringData 仍然会导致相同的错误:
apiVersion: v1
kind: Secret
metadata:
name: monsoon-storage-reporting-config
type: Opaque
stringData:
config: {"database": "foo"}
error: error validating "STDIN": error validating data: ValidationError(Secret.stringData.config): invalid type for io.k8s.api.core.v1.Secret.stringData: got "map", expected "string"; if you choose to ignore these errors, turn validation off with --validate=false
我必须对值进行 base64 编码
$ echo {"database": "foo"} | base64
e2RhdGFiYXNlOiBmb299Cg==
然后在data:
字段中使用base64编码值
apiVersion: v1
kind: Secret
metadata:
name: reporting-config
type: Opaque
data:
config: e2RhdGFiYXNlOiBmb299Cg==
另请注意 base64 encoding:
When using the base64 utility on Darwin/macOS users should avoid using the -b option to split long lines. Conversely Linux users should add the option -w 0 to base64 commands or the pipeline base64 | tr -d '\n' if -w option is not available.
您可以使用如下的 stringData。注意 stringData 之后的管道:
apiVersion: v1
kind: Secret
metadata:
name: monsoon-storage-reporting-config
type: Opaque
stringData: |
config: {"database": "foo"}