K8S Secret管理之SealedSecrets

1 關于K8S Secret

我們通常將應用程序使用的密碼、API密鑰保存在K8S Secret中,然后應用去引用。對于這些敏感信息,安全性是至關重要的,而傳統的存儲方式可能會導致密鑰在存儲、傳輸或使用過程中受到威脅,例如在git中明文存儲密碼或在配置文件中以明文形式存放密碼。

2 SealedSecrets

為了解決Secret的安全問題,SealedSecrets通過使用公鑰加密技術來提高密鑰的安全性。它使用了非對稱加密算法,將明文的secret加密為SealedSecrets,只有具有相應私鑰的受信任的控制器才能解密和使用密鑰。在這種情況下,即使是創建密鑰的人也無法從加密的secret中恢復原始secret。

3 部署SealedSecrets

直接通過helm安裝,

helm repo add sealed-secrets https://bitnami-labs.github.io/sealed-secrets
helm search repo sealed-secrets/sealed-secrets
NAME                         	CHART VERSION	APP VERSION	DESCRIPTION
sealed-secrets/sealed-secrets	2.15.3       	0.26.2     	Helm chart for the sealed-secrets controller.

這里有個坑,需要注意下,因為默認helm安裝的controller名字是sealed-secrets,但是客戶端工具kubeseal默認是用的服務名稱是sealed-secrets-controller,因此安裝時要通過–set-string設置下名字,否則使用kubeseal時會有下列報錯,

error: cannot get sealed secret service: services "sealed-secrets-controller" not found.
Please, use the flag --controller-name and --controller-namespace to set up the name and namespace of the sealed secrets controller	

安裝當前最新版本2.15.3

helm install sealed-secrets --set-string fullnameOverride=sealed-secrets-controller sealed-secrets/sealed-secrets --version 2.15.3
NAME: sealed-secrets
LAST DEPLOYED: ...
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:...

sealed-secrets默認會安裝到kube-system namespace,

kubectl get po -n kube-system | grep sealed-secrets
sealed-secrets-6bdbdfcf6-kgt7x         1/1     Running   0            2m22s

部署后,控制器會在當前namespace中搜索帶有 sealedsecrets.bitnami.com/sealed-secrets-key標簽的secret。如果找不到,控制器會在其namespace中創建新的secret,并將密鑰對的公鑰部分打印到輸出日志中,

kubectl logs -f sealed-secrets-controller-f994b58c6-f46pt -n kube-system
level=INFO msg="Starting sealed-secrets controller" version=v0.26.2
level=INFO msg="Searching for existing private keys"
level=INFO msg="New key written" namespace=kube-system name=sealed-secrets-keyml59m
level=INFO msg="Certificate generated" certificate=....

控制器使用的密鑰對就被保存在sealed-secrets-keyml59m,這個secret需要嚴格安全保存,它是這個集群加密的原始密鑰,所有secret都依賴這個來加密。

4 加密secret

SealedSecrets提供了一個客戶端工具kubeseal來加密secret,所以首先要先安裝這個工具,

KUBESEAL_VERSION='' # Set this to, for example, KUBESEAL_VERSION='0.23.0'
wget "https://github.com/bitnami-labs/sealed-secrets/releases/download/v${KUBESEAL_VERSION:?}/kubeseal-${KUBESEAL_VERSION:?}-linux-amd64.tar.gz"
tar -xvzf kubeseal-${KUBESEAL_VERSION:?}-linux-amd64.tar.gz kubeseal
sudo install -m 755 kubeseal /usr/local/bin/kubeseal

然后就可以開始加密我們的secret了,

假設我們有以下secret,

$ cat mysecret.yaml
apiVersion: v1
kind: Secret
metadata:name: mysecretnamespace: kube-system
data:foo: YmFy  # <- base64 encoded "bar"

我們直接使用kubeseal對其加密,并輸出到mysecret_sealed.yaml

$ kubeseal < mysecret.yaml > mysecret_sealed.yaml
$ cat mysecret_sealed.yaml
{"kind": "SealedSecret",..."spec": {..."encryptedData": {"foo": "AgCKwrBaLJxNPLfClItshQrWEoD0ntykNbOGKcA/F/a8Cj3lZ7aFLiNJ+pqp8AZcHpsBeUpSZwQv4OtHaXnSgJO+L4q4yLFYVKL9oDBHKvZyWjZfEeDPASUn1dSz6FBs88S/HhvfPxJY98MBNPAQwVAnnfIrscZ/vhYm7qYaj55mwJNWd0X9JjJ6EcLpKpib/qa6jFhBivmwbZ275ykU60v4nAvN8I3pEAZxD4TYk+Fni4wBj6y9EZyG6rkO9jNG+Ff0Xs3RVyEoCf9kt+t2ylusPJ+tHJNrGZ2qxXL3UCQEGwKPMV4ZNHvVRgiJT2C/l5x1L6BHWHIV/oio0BNNBT7CrvlG2EDEBbQz6J12ZjPquWHLUbLIXx4kKBbTxhYVRs4YS9F2RHwWu6ItU/M19iRLHqpJe5jXWzme4Oo2GCYqyQc4BB/Z9w2TxJKqLr7CidT+nfeKMLWMng8Qf+Curtnz4CPwp75Xj4Kj6obgICkNJn6PKL7F6JSszHVfAWVhjHsODUEdWG3cV9Mne/7BdoOfHoNvHIY3Bjbms0Fzl9VndAeFwpymJRaEHHkZALk0uWBfTcaw7HyL4EDMEapJ8Rd4v++gMuOaMSEjN1vQwygMxmLqsrx55Rm2vXcsd0flj239TQ2BC3GYvzKpJBqV7sf65Zuzmpd9iVYeLO7soCnRImwJ6KQOh4fG6K3KGPf6uNmvwW4="}}
}

這種方式要求你當前已經連接到k8s apiserver,如果要使用離線方式加密,需要提前先把公鑰下載到本地,

kubeseal --fetch-cert > public-key-cert.pem

然后加密時指定密鑰文件即可,

kubeseal --cert=public-key-cert.pem < secret.yaml > sealed-secret.yaml

5 部署加密后的secret

我們可以直接apply加密后的mysecret_sealed.yaml

$ k apply -f mysecret_sealed.yaml
sealedsecret.bitnami.com/mysecret created

在controller日志里就能看到secret被成功解密,

level=INFO msg=Updating key=kube-system/mysecret
level=INFO msg="Event(v1.ObjectReference{Kind:\"SealedSecret\", Namespace:\"kube-system\", Name:\"mysecret\", UID:\"c77070a1-167b-4897-bed5-336c857a6f1e\", APIVersion:\"bitnami.com/v1alpha1\", ResourceVersion:\"1326784263\", FieldPath:\"\"}): type: 'Normal' reason: 'Unsealed' SealedSecret unsealed successfully"

6 解密secret

如果實在需要解密加密過的secret,可以使用kubeseal --recovery-unseal來操作,但是前提是你本地保存了控制器使用的公私鑰密鑰對。

如果你有權限,可以通過以下命令下載密鑰對,

kubectl get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o yaml > sealed-secrets-key.yaml

然后再解密

kubeseal --recovery-unseal --recovery-private-key sealed-secrets-key.yaml < mysealedsecret.yaml > mysecret.yaml

7 其他

  1. 加密secret時需要先對數據進行base64加密,這里有個隱藏的坑,我習慣直接是用命令行加密,比如加密123456
    $ echo "123456" | base64 MTIzNDU2Cg==
    但是這里會有個問題,加密后的密碼其實是包含了一個換行符,因此再經過sealedsecret加密的話,如果應用程序直接使用這個值去校驗就會報錯,你就會很郁悶,明明密碼正確為啥加密后就不行。
    對此,echo時需要加個-n參數即可,
    $ echo -n "123456" | base64 MTIzNDU2

  2. 部署加密后的secret前,可以用kubeseal校驗下,
    cat mysecret_sealed.yaml | kubeseal --validate
    如果出錯會有以下報錯,
    error: unable to decrypt sealed secret

  3. SealedSecrets控制器使用的密鑰對默認每30天renew一次,舊的密鑰無法解密新的加密secret,所以不要隨便刪除舊的secret


參考文檔:
4. https://github.com/bitnami-labs/sealed-secrets

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13772.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13772.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13772.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FreeRTOS_事件組_學習筆記

事件組 原文鏈接 事件組是一個整數&#xff0c;其中的高8位留給內核&#xff0c;只能用其他位來表示時間 每一位代表一個事件&#xff0c;且每個時間的含義由程序員決定 1為發生&#xff0c;0為未發生 一個/多個任務或ISR都能讀寫這些位 可以等待某一位&#xff0c;也可以等待…

如何理解合約中的引用類型(3)——Mapping

映射&#xff08;mapping&#xff09; 聲明形式&#xff1a;mapping(key type > value type)keytype可以是除枚舉外的幾乎任何基本類型&#xff0c;包括bytes和string&#xff0c;不包括用戶自定義的復雜類型-合約&#xff0c;枚舉&#xff0c;結構&#xff0c;映射value t…

簡單美觀易上手的 Docker Compose 可視化管理器 Dockge

本文首發于只抄博客&#xff0c;歡迎點擊原文鏈接了解更多內容。 前言 Dockge 是 Uptime Kuma 作者的新作品&#xff0c;因此 UI 風格與 Uptime Kuma 基本一致&#xff0c;如果你正在使用 Uptime Kuma 的話&#xff0c;那么 Dockge 的 UI 設計應該也不會讓你失望。Dockge 主打…

智慧校園為高校帶來哪些價值

在21世紀的教育圖景中&#xff0c;"智慧"不再僅僅是一個科技名詞&#xff0c;它已成為衡量教育現代化水平的重要標志。智慧校園&#xff0c;這一融合了物聯網、大數據、云計算等先進技術的教育新形態&#xff0c;正逐步成為高校轉型升級的關鍵驅動力。本文將從多個維…

note-網絡是怎樣連接的2 協議棧和網卡

助記提要 協議棧的結構協議棧創建連接的實際過程協議棧發送數據包的2個判斷依據TCP確認數據收到的原理斷開連接的過程路由表和ARPMAC地址的分配MAC模塊的工作通過電信號讀取數據的原理網卡和協議棧接收包的過程ICMPUDP協議的適用場景 2章 用電信號傳輸TCP/IP數據 探索協議棧和…

BUUCTF靶場 [reverse]easyre、reverse1、reverse2

工具&#xff1a; DIE&#xff1a;下載&#xff1a;https://download.csdn.net/download/m0_73981089/89334360 IDA&#xff1a;下載&#xff1a;https://hex-rays.com/ida-free/ 新手小白勇闖逆向區&#xff01;&#xff01;&#xff01; [reverse]easyre 首先查殼&#xf…

如何理解HTML語義化

如何理解HTML語義化 HTML語義化&#xff0c;簡單來說&#xff0c;就是使用HTML標簽來清晰地表達頁面內容的結構和意義&#xff0c;而不僅僅是作為布局的容器。它強調使用具有明確含義的HTML標簽來描述頁面元素&#xff0c;而不是僅僅依賴CSS來實現頁面的外觀和布局。 理解HTM…

android 權限相關定義解釋

1 PID &#xff1a;程序一運行系統就會自動分配給進程一個獨一無二的PID&#xff0c;內部線程可以共享 該pid的分配的內存數據 2 UID&#xff1a;User Identifier,UID在linux中就是用戶的ID&#xff0c;表明時哪個用戶運行了這個程序&#xff0c;主要用于權限的管理。內部共享各…

【oracle003】圖片轉為字節、base64編碼等形式批量插入oracle數據庫并查詢

1.熟悉、梳理、總結下Oracle相關知識體系 2.歡迎批評指正&#xff0c;跪謝一鍵三連&#xff01; 資源下載&#xff1a; oci.dll、oraocci11.dll、oraociei11.dll3個資源文件資源下載&#xff1a; Instant Client Setup.exe資源下載&#xff1a; oci.dll、oraocci11.dll、oraoc…

Vue ref訪問這些元素或組件的實例

可以在任意DOM元素上使用ref屬性&#xff0c;然后在Vue實例中通過this.$refs訪問這個DOM元素 1.訪問子組件實例&#xff0c;可以調用方法或者獲取值 <template><div><input type"text" ref"myInput" /><button click"focusInp…

ubuntu手動替換源后,更新源時提示“倉庫.... jammy Release“ 沒有Release文件

問題如圖所示&#xff0c;由于問題不好定位&#xff0c;我就從替換源&#xff0c;以及解決錯誤提示這兩個步驟&#xff0c;來解決其中可能存在的問題。 1、替換源 這一步驟&#xff0c;網上的資料可以搜到很多&#xff0c;我跟著做了之后&#xff0c;總會冒出來各種各樣的小問…

皮影戲藝術品3D沉浸式展館提供非同一般的趣味體驗

引領藝術展示的未來&#xff0c;深圳華銳視點融合多年的web3d項目制作經驗&#xff0c;傾力打造3D虛擬藝術品展館在線編輯平臺&#xff0c;為您提供一個超越時空限制的線上藝術展示平臺。 一、極致視覺盛宴 我們擁有領先的美術團隊&#xff0c;運用先進的web3D開發技術&#xf…

可能是最適合PS的AI插件,設計師大救星!StartAI初體驗!不是恰飯

這款軟件雖然有一些功能需要完善&#xff0c;比如&#xff1a; 1&#xff1a;生成圖片產品海報&#xff0c;會出現圖隨意出現&#xff0c;跟設計圖起沖突&#xff0c;需要PS才可以正常使用它。 2&#xff1a;即使開會員也需要排隊生成。 3: 還有&#xff0c;會員沒有更加好用的…

vue3結合element-plus之如何優雅的使用表單組件

背景 在日常開發中,我們會經常使用 element-ui 或者是 antdesign 或者是 element-plus 等組件庫實現搜索功能 這里就需要用到相關表單組件 下面就以 element-plus 為例,我們實現一個搜索功能的組件,并且隨著屏幕尺寸的變化,其布局也會跟隨變化 最終大致效果如下: 這里…

詳解VLSM技術

在現代網絡設計中&#xff0c;如何高效地分配和管理IP地址是一個關鍵問題。傳統的子網劃分方法雖然簡單&#xff0c;但在實際應用中常常導致IP地址的浪費。為了應對這一問題&#xff0c;VLSM&#xff08;Variable Length Subnet Mask&#xff0c;可變長子網掩碼&#xff09;技術…

C++:set和map的底層封裝模擬實現

目錄 底層對比&#xff1a; 底層紅黑樹結構和set、map&#xff1a; 底層模擬&#xff1a; 傳值調用&#xff1a; 迭代器&#xff1a; operator &#xff08;&#xff09; find函數 operator&#xff08;&#xff09; 、仿函數 set和map的仿函數 &#xff1a; 圖解&a…

地平線-旭日X3派(RDK X3)上手基本操作

0. 環境 - win10筆記本 - RDK X3 1.0&#xff08;地平線旭日X3派&#xff0c;后來改名為代號RDK X3&#xff09; 1. 下載資料 https://developer.horizon.ai/resource 主要下載鏡像 http://sunrise.horizon.cc/downloads/os_images/2.1.0/release/ 下載得到了 ubuntu-prei…

vs無法打開或包括文件”QTxxx“

vs創建項目時默認引入core、gui、和widgets等模塊&#xff0c;在需要網絡通訊或者圖表等開發時需要添加相應模塊。 點擊擴展 -> QT VS Tools -> QT Project Setting->Qt Modules&#xff0c;添加相應模塊即可

linux自動部署項目的腳本(從git中拉取并執行)

名字&#xff1a;bootStart.sh ?#!/bin/sh #記事本打開&#xff0c;修改編碼格式為utf8&#xff0c;可解決上傳centos后中文亂碼問題 echo echo 自動化部署腳本啟動 echo echo 停止原來運行中的工程 APP_NAME項目名 # 查詢系統中正在運行的項目進程&#xff0c;并停止進程 …

Ubuntu系統版本查看辦法

Ubuntu系統版本查看辦法 1. 使用 lsb_release 命令2. 查看 /etc/issue 文件3. 使用 hostnamectl 命令4. 查看 /etc/os-release 文件5. 查看內核版本6. 使用 neofetch 命令&#xff08;如果已安裝&#xff09;總結 在 Ubuntu 操作系統中&#xff0c;查看當前系統版本的詳細信息可…