當前位置: 妍妍網 > 碼農

使用 kubeseal 加密和管理 k8s 集群的 secret

2024-07-16碼農

戳下方名片 ,關註並 星標

回復「 1024 」獲取 2TB 學習資源!

👉 體系化學習:

特色專欄

/ /

/ /

/ /

/ /

/ /

大家好,我是民工哥!

今天來聊一聊關於使用kubeseal加密和管理k8s集群的secret。

在k8s的管理過程中,像secret這種資源並不好維護,kubeseal提供了一種相對簡單的方式來對原始secret資源進行加密,並透過控制器進行解密,以此來規避secret泄露風險。

安裝

安裝kubeseal

$ wget https://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 https://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檔內容一致。

$kgetsecretsecret-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資源必須位於相同的名稱空間。

kubeseal支持如下API:

上例中controller用的證書是自己生成的,還可以指定自己的證書,更方便遷移和管理。

使用kubeseal可能會有一種困惑,如果使用者直接掛載其他名稱空間的secret,那麽這樣可能會導致secret泄露。官方對此有作解釋,如可以透過RBAC限制使用者可以存取的名稱空間以及資源型別。

作者:charlieroro 連結:

cnblogs.com/charlieroro/p/16361984.html

👍 如果你喜歡這篇文章,請點贊並分享給你的朋友!

公眾號讀者專屬技術群

構建高品質的技術交流社群,歡迎從事後端開發、運維技術進群( 備註崗位,已在技術交流群的請勿重復添加微信好友 )。主要以技術交流、內推、行業探討為主,請文明發言。 廣告人士勿入,切勿輕信私聊,防止被騙。

掃碼加我好友,拉你進群

PS:因為公眾號平台更改了推播規則,如果不想錯過內容,記得讀完點一下 在看 ,加個 星標 ,這樣每次新文章推播才會第一時間出現在你的訂閱列表裏。 在看 支持我們吧!