从 .json 文件创建 Kubernetes 密钥

15

我有一个JSON文件,其中包含以下一些键:

{
  "a":"someval"
  "b":"someval"
  .. more keys
}
我该如何将这些密钥添加到Kubernetes中的secret? 当我尝试使用$ kubectl create secret generic mysecret --from-file=file.json时,它返回一个包含文件的secret,但我想要将文件内容映射到secret中,而不是将文件添加为secret。 输出: $ kubectl get secret mysecret -o yaml
apiVersion: v1
data:
  file.json: #base64 encoded stuff here.
kind: Secret

期望的输出:

$ kubectl get secret mysecret -o yaml

apiVersion: v1
data:
  a: someval
  b: someval
kind: Secret

我做错了什么?


如果您不想加密秘密内容,可以使用 ConfigMap。 - Archonic
4个回答

10

如果您有平面(非嵌套)JSON,请尝试此方法(假设您已安装jq工具):

kubectl create secret generic test --from-env-file <(jq -r "to_entries|map(\"\(.key)=\(.value|tostring)\")|.[]" YOUR_FILE.json)

对于任何遇到问题的人,请注意在 jq 查询中只转义左括号:\(foo) - Eric Walker
只有在密钥不包含换行符的情况下才有效。如果您有一个 PEM 格式的私钥,这种方法将无法使用。 - Jens Baitinger

7
尝试以下步骤:
kubectl proxy --port 8000 &  
curl localhost:8000/api/v1/namespaces/default/secrets 

curl localhost:8000/api/v1/namespaces/default/secrets \
  -X POST -H "Content-Type: application/json" \
  --data '{"metadata":{"name":"mytest"},"stringData":{"a":"test","b":"test","c":"test"}}'

master $ curl localhost:8000/api/v1/namespaces/default/secrets/mytest{
  "kind": "Secret",
  "apiVersion": "v1",
  "metadata": {
    "name": "mytest",
    "namespace": "default",
    "selfLink": "/api/v1/namespaces/default/secrets/mytest",
    "uid": "55736602-725e-11e9-b3a2-0242ac110034",
    "resourceVersion": "2948",
    "creationTimestamp": "2019-05-09T13:28:29Z"
  },
  "data": {
    "a": "dGVzdA==",
    "b": "dGVzdA==",
    "c": "dGVzdA=="
  },
  "type": "Opaque"
}

4
创建一个像这样的json文件(注意,秘密值必须是base64编码):
{ 
  "metadata": {
    "annotations": {},
    "name": "mytest",
    "namespace": "default"
  },
  "apiVersion": "v1",
  "kind": "Secret",
  "data": {
    "a": "dGVzdA==",
    "b": "dGVzdA=="
  }
}

然后将其传递到 kubectl create 命令中:
kubectl create -f secrets-file.json

-1

您可以使用--from-literal

kubectl create secret generic secretname --from-literal "someJsonKey=$(cat somejsonfile.json)"

然后您可以使用以下方式恢复数据:
kubectl get secret secretname -o 'go-template={{ .data.someJsonKey | base64decode }}'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接