如何防止将Kubernetes Secrets推送到git存储库中?

时间:2019-12-05 21:19:21

标签: kubernetes devops skaffold

所以我的项目中有这个清单:

apiVersion: v1
kind: Secret
metadata:
  name: cambiotoday-secret-key
  namespace: default
type: Opaque
stringData:
  ct-key: <my_third_party_service_key>
---

# The rest of it, deployment and service.
...

我正在寻找一种方法,可以将该清单推送到我的git存储库中,但不发布其中的实际密钥。

我正在使用Skaffold构建我的kubernetes应用程序。

根据K8S文档:

  

如果您的应用程序使用以下配置文件:

     
apiUrl: "https://my.api.com/api/v1"
username: "user"
password: "password"
     

您可以使用以下方法将其存储在Secret中:

     
apiVersion: v1
kind: Secret
metadata:
 name: mysecret
type: Opaque
stringData:
  config.yaml: |-
    apiUrl: "https://my.api.com/api/v1"
    username: {{username}}
    password: {{password}}
     

然后,您的部署工具可以在运行kubectl apply之前替换{{username}}和{{password}}模板变量。

哪些部署工具?看起来正是我需要的东西,但我不知道如何设置它。

4 个答案:

答案 0 :(得分:3)

看看sealed-secrets,它允许您将加密的机密版本放入Git。

关于允许您使用YAML模板化的部署工具,请查看HelmKustomize或许多其他类似工具。如果那对您不起作用,也可以使用一些脚本来达到目的。

答案 1 :(得分:2)

有一些流行的技术可以完成此任务:

  1. 密封机密More examples here实际上,您可以将完整的秘密YAML加密为密封机密,然后使用kubeseal工具在Kubernetes集群级别再次解密。您可以在git或任何SCM中提交密封的秘密。

    它还具有许多其他功能,可提高安全性,例如“秘密轮换”,“尽早更新密钥(以防万一)”

  2. 保险柜Check here该工具在社区和企业版中均可用。它包括许多其他功能。

  3. Kamus Check here

和其他工具。

如果您的要求不是很大,那么 Sealed Secrets 将为您服务。

  • 密封秘密的使用:
#import "module_name-Swift.h"

通过这种方式可以部署您的秘密。然后将加密的JSON存储在git中。

答案 2 :(得分:0)

我认为一种很整洁的方法是将您的凭据(用户名/密码/密钥等)存储在诸如lastpass之类的文件库中,该文件库是CLI附带的,并且在k8s上非常有效。它还使在团队中管理共享凭据变得容易:) https://engineering.upside.com/synchronizing-kubernetes-secrets-with-lastpass-584d564ba176

答案 3 :(得分:0)

您可以将加密的PWD保存在secrets.yaml中,并将其推送到GIT中。 https://github.com/mozilla/sops 与加密相关的主密钥的范围可以从AWS KMS,Azure KMS,GCP KMS等等。这可以帮助您轻松地在适当的云提供商内部进行部署。