1

我们编排的一部分使用 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 将其解释为 map 类型并抱怨:

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
4

2 回答 2

1

您可以使用 stringData 如下。注意 stringData 之后的管道:

apiVersion: v1
kind: Secret
metadata:
  name: monsoon-storage-reporting-config
type: Opaque
stringData: |
  config: {"database": "foo"}
于 2020-10-30T17:43:44.500 回答
0

我必须对值进行base64编码

$ echo {"database": "foo"} | base64
e2RhdGFiYXNlOiBmb299Cg==

然后在data:字段中使用base64编码的值

apiVersion: v1
kind: Secret
metadata:
  name: reporting-config
type: Opaque
data:
  config: e2RhdGFiYXNlOiBmb299Cg==

另请注意base64 编码

在 Darwin/macOS 上使用 base64 实用程序时,用户应避免使用 -b 选项来分割长行。相反,Linux 用户应该将选项 -w 0 添加到 base64 命令或管道 base64 | tr -d '\n' 如果 -w 选项不可用。

于 2020-01-23T16:56:59.810 回答