我正在嘗試學習 Google Kubernetes Engine。我正在 Node.js 中在包含 6 個敏感環境變數的集群上部署一個 Web 應用程式。在本地,我將它們保存在 .gitignored 的 .env 檔案中。我將代碼推送到 github,它通過觸發器在 Cloud Build 上創建了一個容器。
我正在使用 GCP 的圖形用戶界面(即不是 Kubectl、gsutil 或類似的)。我也在沒有 Yaml 檔案的情況下這樣做。這現在作業得很好。
但是,我正在解決一個問題,該問題使我不得不一直部署新的作業負載,因此我每次都需要添加這些環境變數,這非常乏味。
我知道解決方案是使用 gsutil 和/或使用 yaml-files 來完成。我知道我將不得不在某個時候開始使用 gsutil 和 yaml,也許就是現在。
但是,我想知道我是否將環境變數放在我推送到 github 并進一步推送到 GCP 的 yaml 檔案中,我顯然不能忽略它。那么,我如何將密碼等保留在代碼庫之外?出于這個原因,我將這些變數從代碼中移到了環境變數中。
以簡單安全的方式在 GCP 上處理環境變數的常見/良好做法是什么?
uj5u.com熱心網友回復:
以簡單安全的方式在 GCP 上處理環境變數的常見/良好做法是什么?
非常簡單的檔案:https : //cloud.google.com/kubernetes-engine/docs/concepts/secret
您應該使用鍵值存盤或其他鍵值管理服務。
Kubernetes 建議最佳實踐是使用 K8s密鑰和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 等。
如果它是簡單的 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 檔案方面,如果您使用Vault或機密管理器,則不必管理YAML 檔案中的機密,或者部署 YAML 不會存盤任何機密 機密。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/378743.html
