如何使用 KubeSeal 高效加密和管理 Kubernetes 叢集的 Secret
在 K8s 的管理過程中,像 Secret 這種資源並不好維護,KubeSeal 提供了一種相對簡單的方式來對原始 Secret 資源進行加密,並通過控制器進行解密,以此來規避 Secret 洩露風險。
安裝
安裝 KubeSeal
$ wget http://github.com/bitnami-labs/sealed-secrets/releases/download/v0.18.0/kubeseal-0.18.0-linux-amd64.tar.gz $ tar -xvf kubeseal-0.18.0-linux-amd64.tar.gz $ cp kubeseal /usr/local/bin/ $ kubeseal --version
安裝 controller
$ kubectl apply -f http://github.com/bitnami-labs/sealed-secrets/releases/download/v0.18.0/controller.yaml
執行上述命令之後會在 kube-system
名稱空間下啟動一個控制器 Pod:
$ k get pod -n kube-system |grep seal sealed-secrets-controller-b9fb75d85-k4csm 1/1 Running 0 7h28m
Pod 啟動之後,使用埠轉發對映到本地:
$ kubectl -n kube-system port-forward svc/sealed-secrets-controller 8080:8080
使用方式
生成加密檔案
首先在本地建立一個名為 secret-example.yaml
的檔案,編碼前的 secret
欄位為: mysupersecret
apiVersion: v1 kind: Secret metadata: name: secret-example data: secret: bXlzdXBlcnNlY3JldAo=
使用如下命令將 secret-example.yaml
,轉換為加密後的檔案 sealed-secret-example.yaml
$ kubeseal --secret-file secret-example.yaml --sealed-secret-file sealed-secret-example.yaml
sealed-secret-example.yaml
的內容如下, spec.encryptedData.secret
就是加密後的內容:
apiVersion: bitnami.com/v1alpha1 kind: SealedSecret metadata: creationTimestamp: null name: secret-example namespace: kube-system spec: encryptedData: secret: AgB1ZZg8+J+0HLymOQZdTfWVQZiNkhm5X6WULJuBAAEaQQNhM8i2TV2I1SgKT4sUOCRv90XA1oeFld3XoGPjvYE3leOD1cvK1dDVqno6mNLRziokISk/9fB3cVE2GVgyCud//M53xNpVemDufgsJS2q/KGIOeNEijk9ZM2FaKoLDwtPaVNL0NfmC2xne2XtWJp+/eMOREhbubQhnj5M/Se75axazviuDNf6Ss9fAuR38Msd5DXnKBtyrckEHSa8TDn8ErssOh0ogX14e0/ThN3EWJecSBtx7Xfd0m90+vjmvWevMag442349aquR/qLo0mg40mhcCqSBw/MjaIGZ2F5XRufG1WEP43OgLMTixN2lLSU3eYTrv5t075taI9WJgoOl0DD8UA74EMpX7RMKTiXD6C0XngKmMKg5fUK7JNLFfwHMRPi4zNTwJa9ViDyD0iAJrGGbmMso/nHEtwOtrLE5Rrf0kLQ5N6Lj57gOBdqu903/vDM4Jm695GvEWL2aR3ShOxasHCuZeXj8Q5+KYWeF9sySiJH8bwEtaw6x7j9AxBOwjxWYD0Jvj9KhtlqBa4okSDc3bcgRKGhsSXQx6jOumI5rj+V542hkB6Z8JOtJ17VmzR6XDQDmqSl1FqqwKD5n5yUy5Kf6pJYBnsgKn3TzesQ6JfQbyRLTh1Pn3odOYCnp+Ixbd0Tgn0n5m0KO3RX0hiwGoe0hObIZcsF36g== template: data: null metadata: creationTimestamp: null name: secret-example namespace: kube-system
可以將加密後的檔案儲存到 Gitlab。
建立加密檔案:
$ k create -f sealed-secret-example.yaml sealedsecret.bitnami.com/secret-example created $ k get sealedsecrets.bitnami.com NAME AGE secret-example 6s
在建立完加密檔案之後,Controller 會解密並生成對應的 secret
:
$ k get secrets |grep secret-example secret-example Opaque 1 2m15s
檢視由 Controller 生成的 secret
資源內容,可以看到 data.secret
與上面建立的 secret-example.yaml
檔案內容一致:
$ k get secret secret-example -oyaml apiVersion: v1 data: secret: bXlzdXBlcnNlY3JldAo= kind: Secret metadata: creationTimestamp: "2022-06-10T00:50:40Z" name: secret-example namespace: kube-system ownerReferences: - apiVersion: bitnami.com/v1alpha1 controller: true kind: SealedSecret name: secret-example uid: 57a5b691-9bb5-4dac-800a-1a1baa878299 resourceVersion: "675560" uid: e0db31ad-082b-4596-9fd0-28cc810d86f4 type: Opaque
注: SealedSecret
和對應的 secret
資源必須位於相同的名稱空間
TIPs
-
kubeseal
支援如下 API :Route Description /healthz Health check route useful for the readiness and liveness probes and for creating an external probe; for example with blackbox exporter. /metrics Endpoint for the Prometheus to retrieve the controller’s metrics. /v1/verify Validates a secret. /v1/rotate Rotates the secret. /v1/cert.pem Retrieves the public certificate. -
上例中 Controller 用的證書是自己生成的,還可以 指定自己的證書 ,更方便遷移和管理
-
使用
KubeSeal
可能會有一種困惑,如果使用者直接掛載其他名稱空間的 secret,那麼這樣可能會導致 secret 洩露。官方對此有作 解釋 ,如可以通過 RBAC 限制使用者可以訪問的名稱空間以及資源型別。更多參見 README
參考
本文轉載自:「 部落格園 」,原文: http://url.hi-linux.com/vakJR ,版權歸原作者所有。歡迎投稿,投稿郵箱:[email protected]。
- 如何使用 KubeSeal 高效加密和管理 Kubernetes 叢集的 Secret
- 如何使用 cri-docker 解決 Kubernetes 1.24 不支援 Docker 的問題
- 輕量級 Kubernetes 叢集發行版 K3s 完全進階指南
- 24 個 常見的 Docker 疑難雜症處理技巧
- 1分鐘Linux效能分析
- 5 個冷門但非常實用的 Kubectl 使用技巧,99% 的人都不知道
- DevEco Device Tool 2.2 Beta2版本釋出,支援Hi3861 Linux一站式編譯燒錄
- 兩個 99% 的人都遇到過的 Kubernetes 故障處理技巧
- 幾種修改 Docker 映象預設儲存位置的方法
- Hi3559AV100 NNIE開發(5)mobilefacenet.wk模擬成功量化及與CNN_convert_bin_and_print_featurem...
- 【資源下載】Linux下的Hi3861一站式鴻蒙開發燒錄(附工具)
- 轉 hi3516 ev200 sdk編譯
- 基於 Hi3861 平臺的 HarmonyOS Device 開發體驗--環境搭建篇
- 使用HiBurn燒錄鴻蒙.bin檔案到Hi3861開發板
- 馳為Hi8安裝Debian Linux
- 海思3519A入門筆記:(一)海思Hi3519A開發環境搭建
- hi,這有一份第 15 屆 CLK 參會指南(議程全劇透)
- 【Hi3559AV100 Camera】Hi3559AV100 雙系統下使用 sharefs