kubernetes - 从配置到特定命名空间的 env 文件创建机密

时间:2021-07-12 09:14:57

标签: kubernetes kubectl

所以在创建秘密时我经常使用:

kubectl create secret generic super-secret --from-env-file=secrets

但是,我想将其移动到专用的 secrets.yaml 文件中,根据文档:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#-em-secret-generic-em-

然而,要做到这一点,我需要对所有秘密进行 base64 编码。世界卫生大会!这是不好的恕我直言。为什么 kubectl 不能为我们处理这个? (改天再讨论)。

所以,我又开始使用 kubectl create secret 命令,该命令非常易于部署 - 但是,我想知道将上述创建的机密应用于特定命名空间的过程是什么? (同样,这可能会涉及一些棘手的事情来使事情正常工作 - 但为什么它不是标准功能却有点令人担忧?)

无论如何,任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

您可以提供 Secret 的 stringData 部分而不是 data 部分。那不需要base64编码。这是一个例子:

apiVersion: v1
kind: Secret
metadata:
  name: secret-basic-auth
  namespace: demo
type: kubernetes.io/basic-auth
stringData:
  username: admin
  password: t0p-Secret

参考:https://kubernetes.io/docs/concepts/configuration/secret/#basic-authentication-secret

答案 1 :(得分:1)

您可以使用 --dry-run-oyaml 标志。

使用此命令生成您的 secrets.yaml 文件

kubectl create secret generic super-secret \
  --from-env-file=secrets --namespace <your-namespace> \
  --dry-run=client -oyaml > secrets.yaml

以上在 k8s 社区中非常标准。

答案 2 :(得分:0)

Kubectl's standard options 包含一个 --namespace-n 选项*,可以轻松实现这一点:

kubectl create secret generic super-secret --from-env-file=secrets --namespace=whatever_namespace_you want

*这在用于创建秘密的文档中未明确包含或提及。这是该部分的假设知识。

相关问题