使用 GitOps 和 Argo CD Vault 插件進行 Secret 管理¶
原文: https://colinwilson.uk/2022/03/27/secret-management-with-gitops-and-argo-cd-vault-plugin/
GitOps 很棒!什麼是 GitOps?
Info
GitOps 是一種進行 Kubernetes 集群管理和應用交付的方法。 GitOps 通過使用 Git 作為聲明性基礎設施和應用程序的單一事實來源來工作。
更簡單地說,GitOps 允許您通過 Git 以代碼的形式設置和管理您的基礎設施和應用程序。
但是密碼、api 令牌、數據庫憑證和其他秘密呢?這些也可以存儲在 Git 中嗎?不!!!在 Git 中存儲秘密是一個非常糟糕的主意。這就引出了一個常見的問題,“你如何使用 GitOps 處理秘密?”。
作法有好幾種。一種常見的方法是對機密本身使用機密管理工具(例如 HashiCorp Vault),並使用另一個工具(或多個工具)從管理工具中提取這些機密並將它們“注入”到 Kubernetes 集群中。
本教程涵蓋了使用 Argo CD Vault Plugin 管理機密的特定場景。 Argo CD Vault Plugin(顧名思義)是一個 Argo CD 配置管理插件,與許多機密管理工具(HashiCorp Vault、IBM Cloud Secrets Manager、AWS Secrets Manager 等)兼容。本教程介紹了它與 HashiCorp Vault 的集成。
先決條件¶
對於本指南,您將需要以下內容:
- HashiCorp Vault 安裝
- Terraform、Kubernetes、Git/GitHub 和 Traefik 的初學者到中級知識
- Terraform ≥ v0.15
Argo CD Vault 插件的工作原理¶
Argo CD Vault 插件允許將佔位符 placeholder
存儲在 git 中,而不是實際的 Kubernetes secret。
所以一個典型的 yaml/manifest secret
範例如下:
Argo CD Vault 插件允許我們將 TOKEN 的值替換為佔位符 placeholder
然後再存儲在 git 中,例如:
下圖說明了 Argo CD Vault 插件將機密注入 Kubernetes 集群的過程中的步驟:
- Argo CD 從 Git Repo 拉取 Secret manifest 模板
- Vault 插件由模板中存在的佔位符觸發
- 該插件通過 Vault 進行身份驗證並拉取 secret(根據
avp.kubernetes.io/path
註解設置的路徑定位) - 檢索到的秘密被注入到模板中,替換佔位符
- Argo CD 然後將更新的清單應用到 Kubernetes
Tip
Argo CD Vault 插件並非專門用於 secret。它還可以用於 deployment、configMaps 或任何其他 Kubernetes 資源。
設置 Kubernetes 集群¶
在此教程中,我們將部署 argocd 並使其可通過 ingress
來訪問。因此,我們必須以某種方式創建 Kubernetes 集群,使內部端口 80(traefik ingress controller 正在監聽的地方)暴露在主機系統上。
Info
-p "8081:80@loadbalancer"
意味著:
- “將主機的 8081 端口映射至
loadbalancer
容器上的80
端口
Argo CD Vault 插件並非專門用於秘密。它還可以用於部署、configMaps 或任何其他 Kubernetes 資源。
接著讓我們在 Kubernetes 上安裝 ArgoCD。
ArgoCD 安裝¶
安裝 ArgoCD 並檢查 argocd
命名空間中的每個 pod 是否正常運行:
$ kubectl create namespace argocd
$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
成功部署 ArgoCD 將顯示以下 pod:
NAME READY STATUS RESTARTS AGE
argocd-application-controller-0 1/1 Running 0 2m18s
argocd-dex-server-5dd657bd9-2r24r 1/1 Running 0 2m19s
argocd-redis-759b6bc7f4-bnljg 1/1 Running 0 2m19s
argocd-repo-server-6c495f858f-p5267 1/1 Running 0 2m18s
argocd-server-859b4b5578-cv2qx 1/1 Running 0 2m18s
曝露 ArgoCD 服務¶
為了簡化學習,我們使用 kubectl port-forward
來將 argocd
的服務曝露出來。打開一個新的 terminal
並輸入下列的命令:
使用 ArgoCD Web UI¶
取得部署 ArgoCD 時生成的隨機密碼:
$ argoPass=$(kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d)
$ echo $argoPass
將 ArgoCD 網絡位址設成環境變數:
使用瀏覽器來連接 ArgoCD 控制台。
使用用戶 admin
和上一步中提取的密碼訪問 ArgoCD 控制台:
登錄後,您應該會看到以下頁面。
這是 Argo CD Web UI。