将环境变量与 Google Kubernetes Engine 一起使用(安全、简单且良好的做法)?
Use environmental variables with Google Kubernetes Engine (safe, easy and good practise)?
我正在尝试学习 Google Kubernetes Engine。我正在 Node.js 中的一个包含 6 个敏感环境变量的集群上部署 Web 应用程序。在本地,我将它们放在一个我有 .gitignored 的 .env 文件中。我将代码推送到 github,它通过触发器在 Cloud Build 上创建一个容器。
我正在使用 GCP 的图形用户界面(即不是 Kubectl、gsutil 或类似的东西)。我也在没有 Yaml 文件的情况下这样做。这现在工作得很好。
但是,我正在解决一个问题,这个问题让我不得不一直部署新的工作负载,因此我每次都需要添加这些环境变量,这非常乏味。
我知道解决方案是使用 gsutil and/or 使用 yaml 文件。我知道我将不得不在某个时候开始使用 gsutil 和 yaml,也许就是现在。
但是,我想知道我是否将环境变量放在我推送到 github 并进一步推送到 GCP 的 yaml 文件中,我显然不能 gitignore 它。 那么,我如何将密码等保存在代码库之外? 出于这个原因,我将这些变量从代码移到了环境变量中。
在 GCP 上以简单安全的方式使用环境变量的common/good实践是什么?
What is common/good practise to work with environmental variables on
GCP - in a easy and safe manner?
非常简单的文档:https://cloud.google.com/kubernetes-engine/docs/concepts/secret
您应该使用键值存储或其他键值管理服务。
Kubernetes 建议最好的做法是使用 K8s secret 和 configmap 这是 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
您将文件存储到秘密中,并将该秘密 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
现在由你决定你拥有哪种类型的环境变量,如果它是简单的键值或 .env 等
如果是简单的键值,您正在寻找 静态加密、安全和其他访问策略,以及 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 文件方面,如果您使用 Vault 或 secret manager,则无需管理 [=50= YAML 文件或部署 YAML 中的 ]secret 不会存储任何 confidential secrets.
我正在尝试学习 Google Kubernetes Engine。我正在 Node.js 中的一个包含 6 个敏感环境变量的集群上部署 Web 应用程序。在本地,我将它们放在一个我有 .gitignored 的 .env 文件中。我将代码推送到 github,它通过触发器在 Cloud Build 上创建一个容器。
我正在使用 GCP 的图形用户界面(即不是 Kubectl、gsutil 或类似的东西)。我也在没有 Yaml 文件的情况下这样做。这现在工作得很好。
但是,我正在解决一个问题,这个问题让我不得不一直部署新的工作负载,因此我每次都需要添加这些环境变量,这非常乏味。
我知道解决方案是使用 gsutil and/or 使用 yaml 文件。我知道我将不得不在某个时候开始使用 gsutil 和 yaml,也许就是现在。
但是,我想知道我是否将环境变量放在我推送到 github 并进一步推送到 GCP 的 yaml 文件中,我显然不能 gitignore 它。 那么,我如何将密码等保存在代码库之外? 出于这个原因,我将这些变量从代码移到了环境变量中。
在 GCP 上以简单安全的方式使用环境变量的common/good实践是什么?
What is common/good practise to work with environmental variables on GCP - in a easy and safe manner?
非常简单的文档:https://cloud.google.com/kubernetes-engine/docs/concepts/secret
您应该使用键值存储或其他键值管理服务。
Kubernetes 建议最好的做法是使用 K8s secret 和 configmap 这是 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
您将文件存储到秘密中,并将该秘密 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
现在由你决定你拥有哪种类型的环境变量,如果它是简单的键值或 .env 等
如果是简单的键值,您正在寻找 静态加密、安全和其他访问策略,以及 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 文件方面,如果您使用 Vault 或 secret manager,则无需管理 [=50= YAML 文件或部署 YAML 中的 ]secret 不会存储任何 confidential secrets.