0

我在kubernetes环境下使用elasticsearch secret函数。
此时使用的证书的分发存在问题。
我使用Elasticsearch 默认使用的.p12格式证书。为了使用 https,所有 POD 都需要使用 Kubernetes Secret 来共享证书。但,
kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt

我不能使用上面的命令,我需要用 .yaml 文件生成秘密。
但是,如果我创建一个.yaml文件,它不会是 base64 编码的。我该如何解决?

最后,我想知道如何编写.yaml?下面的示例不起作用。 https://kubernetes.io/docs/concepts/configuration/secret/

apiVersion: v1
kind: Secret
metadata:
  labels:
  name: my-certificates
  namespace: nms
type: Opaque
files: 
  - my-file
4

2 回答 2

0

尝试像这样创建秘密:

apiVersion: v1
kind: Secret
metadata:
  labels:
  name: my-certificates
  namespace: nms
type: Opaque
data:
  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm

使用正确的用户名和密码。

执行命令:

$ kubectl apply -f your-secret.yaml

重启节点虚拟机。

然后你可以解码密码字段:

$ echo 'MWYyZDFlMmU2N2Rm' | base64 --decode
于 2019-07-05T05:20:17.257 回答
0

命令

kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt

与使用清单文件(例如 yaml 或 json 文件)创建秘密非常相似。kubectl将使用指定的参数创建对象,您可以使用以下命令获取原始清单文件:

kubectl get secret -o yaml db-user-pass

查看kubectl文档:

      --from-file=[]: Key files can be specified using their file path, in which case a default name will be given to
them, or optionally with a name and file path, in which case the given name will be used.  Specifying a directory will
iterate each named file in the directory that is a valid secret key.

你可以对你的 p12 文件做同样的事情,它应该可以工作,也许秘密名称不是你想要的。您可以尝试执行以下操作:

cat > cert.yaml <<EOF
apiVersion: v1
kind: Secret
metadata:
  labels:
  name: my-certificates
  namespace: nms
type: Opaque
data:
  tls: $(cat ca.p12 | base64 | tr -d '\n')
EOF

此外,请注意您可能需要不同的机密类型,因此最好查阅弹性搜索文档。

最后一点:正如您所注意到的,这些秘密在清单文件中是 base64 编码的——这使得将它们存储在源代码控制中(实际上是其他任何地方)非常不安全。有一些很好的解决方案可以创建可以持久保存到源代码控制的加密机密,您可以在这篇文章中阅读更多相关信息。

于 2019-07-07T06:01:26.447 回答