【问题标题】:Use environmental variables with Google Kubernetes Engine (safe, easy and good practise)?在 Google Kubernetes Engine 中使用环境变量(安全、简单且良好的做法)?
【发布时间】:2022-01-14 07:16:26
【问题描述】:

我正在尝试学习 Google Kubernetes Engine。我正在一个包含 6 个敏感环境变量的集群上的 Node.js 中部署一个 Web 应用程序。在本地,我将它们保存在我已 .gitignored 的 .env 文件中。我将代码推送到 github,它通过触发器在 Cloud Build 上创建一个容器。

我正在使用 GCP 的图形用户界面(即不是 Kubectl、gsutil 或类似的)。我也在没有 Yaml 文件的情况下这样做。这目前工作得很好。

但是,我正在解决一个问题,该问题使我不得不一直部署新的工作负载,因此我需要每次都添加这些环境变量,这非常乏味。

我了解解决方案是使用 gsutil 和/或使用 yaml 文件。我知道我必须在某个时候开始使用 gsutil 和 yaml,也许就是现在。

但是,我想知道我是否将环境变量放在我推送到 github 并进一步推送到 GCP 的 yaml 文件中,我显然不能 gitignore 它。 那么,我如何将密码等保留在代码库之外?出于这个原因,我将这些变量从代码中移到了环境变量中。

在 GCP 上以简单安全的方式处理环境变量的常见/良好做法是什么?

【问题讨论】:

    标签: node.js kubernetes google-kubernetes-engine


    【解决方案1】:

    使用环境变量的常见/良好做法是什么 GCP - 以一种简单安全的方式?

    非常简单的文档:https://cloud.google.com/kubernetes-engine/docs/concepts/secret

    您应该使用键值存储或其他键值管理服务。

    Kubernetes 建议最佳实践是使用 K8s secretconfigmap,这是 base64 编码的键值对。您使用 YAML 应用到 K8s 集群并进一步注入到部署和应用程序从环境中获取它。

    您要么将变量注入环境变量,要么作为文件注入文件系统,然后应用程序进一步使用该文件系统。

    您可以查看更多信息:https://kubernetes.io/docs/concepts/configuration/secret/

    作为环境的基本秘密注入示例:

    apiVersion: v1
    kind: Pod
    metadata:
      name: secret-env-pod
    spec:
      containers:
      - name: mycontainer
        image: redis
        env:
          - name: SECRET_USERNAME
            valueFrom:
              secretKeyRef:
                name: mysecret
                key: username 
    

    您将文件存储到 secret 中,并将该 secret base64 编码注入部署并在文件系统中添加文件。一旦您的应用程序启动,它就会开始使用该文件中的文件。

    将秘密作为文件注入文件系统的基本示例:

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
      - name: mypod
        image: redis
        volumeMounts:
        - name: foo
          mountPath: "/etc/foo"
      volumes:
      - name: foo
        secret:
          secretName: mysecret
    

    现在取决于您拥有哪种类型的环境变量,是简单的 Key-value 还是 .env 等。

    如果是简单的 Keyvalue,您正在寻找 加密 静态、安全性和其他访问策略,以及 UI 来更新密钥。

    我建议您查看著名并被许多企业使用的Hashicorp 保险库。使用它,您可以加密秘密并将其注入部署。但是您需要部署和管理这个工作负载,它不是像秘密管理器这样的托管服务。

    我不是 Google 的员工,但您在 GKE 上,我还建议您查看可以管理您的秘密的秘密管理器或 KMS。

    文章:https://cloud.google.com/kubernetes-engine/docs/how-to/encrypting-secrets

    Github CSI 驱动程序:https://github.com/GoogleCloudPlatform/secrets-store-csi-driver-provider-gcp

    如果您不关心编码并且那些不是重要的秘密,您可以使用默认的内置 K8s 秘密

    在提交 YAML 文件方面,如果您使用 Vaultsecret manager 您将不必在 YAML 文件中管理 secret 或部署 YAML 不会存储任何机密 秘密

    【讨论】:

      猜你喜欢
      • 2021-08-20
      • 2015-11-15
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      相关资源
      最近更新 更多