Kubernetes Elasticsearch的秘密.p12 incode base64

时间:2019-07-02 07:27:02

标签: elasticsearch kubernetes kubernetes-secrets

我在kubernetes环境中使用了elasticsearch secret函数。
目前使用的证书分配存在问题。
我使用的是 .p12 格式的证书,Elasticsearch默认使用该格式的证书。要使用https,所有POD都需要使用Kubernetes机密共享证书。 但是
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

2 个答案:

答案 0 :(得分: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

重新启动节点VM。

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

$ echo 'MWYyZDFlMmU2N2Rm' | base64 --decode

答案 1 :(得分: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编码的-这使得将它们存储在源代码管理(或其他任何地方)上确实是不安全的。有一些很好的解决方案可以创建可持久保存到源代码控制中的加密机密,您可以详细了解in this post