3

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

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

4 回答 4

3

看一下seal-secrets,它允许你把你的秘密的加密版本放在 Git 中。

至于允许您模板化 YAML 的部署工具,请查看HelmKustomize或许多其他类似工具。如果这对您不起作用,那么您也应该编写一些脚本。

于 2019-12-05T21:41:58.567 回答
2

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

  1. Sealed-secrets检查这里您实际上可以将完整的秘密 YAML 加密为密封的秘密,该秘密将使用工具 kubeseal 在 Kubernetes 集群级别再次解密。你可以在 git 或任何 SCM 中提交密封的秘密。

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

  2. Vault : Check here此工具在社区和企业版中都可用。它包括许多其他功能。

  3. 卡姆斯检查这里

和其他工具。

如果您的要求不是那么大,密封的秘密会为您工作。

  • 封印秘籍的用法:
# Create a json/yaml-encoded Secret somehow:
# (note use of `--dry-run` - this is just a local file!)
$ echo -n bar | kubectl create secret generic mysecret --dry-run --from-file=foo=/dev/stdin -o json >mysecret.json

# This is the important bit:
$ kubeseal <mysecret.json >mysealedsecret.json

# mysealedsecret.json is safe to upload to github, post to twitter,
# etc.  Eventually:
$ kubectl create -f mysealedsecret.json

# Profit!
$ kubectl get secret mysecret

这样你的秘密就被部署了。您将加密的 JSON 存储在 git 中。

于 2019-12-06T15:30:28.127 回答
0

我认为一种非常简洁的方法是将您的凭据(用户名/密码/密钥等)存储在诸如 lastpass 之类的保管库中,它带有 CLI,并且与 k8s 配合得非常好。它还可以轻松管理团队中的共享凭证 :) https://engineering.upside.com/synchronizing-kubernetes-secrets-with-lastpass-584d564ba176

于 2019-12-06T14:37:25.077 回答
0

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

于 2020-11-11T03:29:42.293 回答