使用vault管理Kubernetes Secret

vault+k8s
vault-agent workflow

我們通過vault的secret(version1 kv)backend來進行管理secret中的key/value际看,通過我們的vault-agent來動態(tài)(每隔SECRET_REFRESH_TIME秒來獲取這些既定路徑的secret,并寫到K8S的secret中歪今。
比如我們寫入以下key/value

vault write secret/projects/georgesreinc-test/services/foo/defaults/test1 value=value1
vault write secret/projects/georgesreinc-test/services/bar/defaults/test1 value=value1
vault write secret/projects/georgesreinc-test/services/bar/defaults/test2 value=value2
vault write secret/projects/georgesreinc-test/services/baz/namespaces/ops/apikey value=secret

kubectl create namespace ops
kubectl create namespace stable
kubectl create namespace all-apps
kubectl create namespace foo
kubectl create namespace wrong
kubectl apply -f - <<-EOF
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: vault-agent.app-config
  namespace: ops
data:
  apps: |-
    - baz
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: vault-agent.app-config
  namespace: all-apps
data:
  apps: ALL
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: vault-agent.app-config
  namespace: foo
data:
  apps: foo
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: vault-agent.app-config
  namespace: wrong
data:
  apps: |-
    - baz
    - ALL
EOF

我們的k8s中自動創(chuàng)建出來的secret條目如下所示:

kubectl get secret --all-namespaces | grep service-secrets should yield something that looks like:

all-apps      bar.service-secrets               Opaque                                2         19m
all-apps      foo.service-secrets               Opaque                                1         19m
foo           foo.service-secrets               Opaque                                1         19m
ops           baz.service-secrets               Opaque                                1         19m
stable        bar.service-secrets               Opaque                                2         19m
stable        foo.service-secrets               Opaque                                1         19m
wrong         bar.service-secrets               Opaque                                2         19m
wrong         foo.service-secrets               Opaque                                1         19m

vault-agent基本上可以實現(xiàn):

  • 控制某個secret只能創(chuàng)建在某個/些指定的namespaces中
  • 動態(tài)更新secret中的key/value值
  • 每隔SECRET_REFRESH_TIME秒更新一次secret

先決條件

  • 已經(jīng)存在了一個k8s(本文用docker for mac自帶的Kubernetes,設置的教程見https://docs.docker.com/docker-for-mac/#kubernetes
  • k8s已經(jīng)安裝集成helm
  • 已經(jīng)存在了一個vault(我們會在mac本地系統(tǒng)起一個測試vault)

設置用于測試的vault server

符合生產(chǎn)環(huán)境的vault搭建會寫在以后的文章中恋日,本文直接在mac上啟動一個dev版本的vault server并且做最簡單的設置

我們按照官方的學習文檔來啟動一個dev vault server祟偷,簡單的步驟如下:
https://learn.hashicorp.com/vault/getting-started/dev-server

  • 安裝vault server
    brew install vault

  • 啟動vault server

 georgehe@Sha-51664-Mbp  ~  vault server -dev -dev-listen-address=0.0.0.0:8200
==> Vault server configuration:

             Api Address: http://0.0.0.0:8200
                     Cgo: disabled
         Cluster Address: https://0.0.0.0:8201
              Listener 1: tcp (addr: "0.0.0.0:8200", cluster address: "0.0.0.0:8201", max_request_duration: "1m30s", max_request_size: "33554432", tls: "disabled")
               Log Level: info
                   Mlock: supported: false, enabled: false
                 Storage: inmem
                 Version: Vault v1.1.2
             Version Sha: 0082501623c0b704b87b1fbc84c2d725994bac54

WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory
and starts unsealed with a single unseal key. The root token is already
authenticated to the CLI, so you can immediately begin using Vault.

You may need to set the following environment variable:

    $ export VAULT_ADDR='http://0.0.0.0:8200'

The unseal key and root token are displayed below in case you want to
seal/unseal the Vault or re-authenticate.

Unseal Key: x4np0Bh3/h5xfxw1hqV0JCdz7QUbpVu90G4YJZ1GdSo=
Root Token: s.w8c22AWPXvyqS7d9cZDdw9Lu

Development mode should NOT be used in production installations!

==> Vault server started! Log data will stream in below:
  • 訪問vault server
    我們要得到mac的IP地址(DHCP)
ifconfig en0 | grep "inet "
    inet 192.168.31.185 netmask 0xffffff00 broadcast 192.168.31.255

我們的vault訪問地址為:http://192.168.31.185:8200

  • 測試vault的可用性芹橡,及寫入兩個用于測試的k/v
$ export VAULT_ADDR=http://192.168.31.185:8200
$ vault status
Key             Value
---             -----
Seal Type       shamir
Initialized     true
Sealed          false
Total Shares    1
Threshold       1
Version         1.1.2
Cluster Name    vault-cluster-79c802fc
Cluster ID      26bef5d1-febd-0319-6170-07808889b9b7
HA Enabled      false

$ vault login token=s.w8c22AWPXvyqS7d9cZDdw9Lu

$ vault secrets disable secret
$ vault secrets enable -path=secret kv

$ vault write secret/projects/georgeinc/services/test-app/defaults/key1 value=value1

$ vault list secret/projects/georgeinc/services/test-app/defaults/

Keys
----
key1

$ vault read secret/projects/georgeinc/services/test-app/defaults/key1

Key                 Value
---                 -----
refresh_interval    768h
value               value1

Using dev mode with KV v1 by default #111
我們用的dev模式,默認secret是version2版本有勾,所以我們先disable secret再重新啟用version1的secret backend

后面我們期待生成的secret名字為test-app.service-secrets疹启,里面有key1=value1的內(nèi)容,此secret將默認出現(xiàn)在所有的namespaces下蔼卡。

使用helm安裝vault

  • 加載george-sre helm repo
helm repo add george-sre 'https://raw.githubusercontent.com/george-sre/helm-repo-in-github/master/'
helm repo update
helm search vault-agent
  • 安裝vault-agent Chart
helm install --debug george-sre/vault-agent                  \
  --name vault-agent                                         \
  --set project=georgeinc                                    \
  --set vault_addr=http://192.168.31.185:8200                \
  --set vault_token=s.w8c22AWPXvyqS7d9cZDdw9Lu
  • 驗證helm的安裝
helm list
NAME        REVISION    UPDATED                     STATUS      CHART               APP VERSION NAMESPACE
vault-agent 1           Mon May 27 15:39:56 2019    DEPLOYED    vault-agent-0.1.0   1.0         default

kubectl get pod
NAME                           READY     STATUS    RESTARTS   AGE
vault-agent-77964b9fbb-xfbkt   1/1       Running   0          34s
  • 驗證secret的創(chuàng)建
kubectl get secret --all-namespaces | grep test-app
docker        test-app.service-secrets                         Opaque                                1         14m

kubectl get secret test-app.service-secrets -n docker -o yaml --export
apiVersion: v1
data:
  key1: dmFsdWUx
kind: Secret
metadata:
  creationTimestamp: null
  labels:
    app: test-app
  name: test-app.service-secrets
  selfLink: /api/v1/namespaces/docker/secrets/test-app.service-secrets
type: Opaque

更多關于vault-agent的用法喊崖,請移步https://github.com/george-sre/vault-agent

鏈接

云平臺開發(fā)運維解決方案@george.sre

個人主頁:https://geekgoogle.com

GitHub: https://github.com/george-sre

Mail: george.sre@hotmail.com

簡書: georgesre - 簡書

歡迎交流~

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市菲宴,隨后出現(xiàn)的幾起案子贷祈,更是在濱河造成了極大的恐慌,老刑警劉巖喝峦,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件势誊,死亡現(xiàn)場離奇詭異,居然都是意外死亡谣蠢,警方通過查閱死者的電腦和手機粟耻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來眉踱,“玉大人挤忙,你說我怎么就攤上這事√冈” “怎么了册烈?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長婿禽。 經(jīng)常有香客問我赏僧,道長,這世上最難降的妖魔是什么扭倾? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任淀零,我火速辦了婚禮,結果婚禮上膛壹,老公的妹妹穿的比我還像新娘驾中。我一直安慰自己唉堪,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布肩民。 她就那樣靜靜地躺著唠亚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪此改。 梳的紋絲不亂的頭發(fā)上趾撵,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音共啃,去河邊找鬼。 笑死暂题,一個胖子當著我的面吹牛移剪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播薪者,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼纵苛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了言津?” 一聲冷哼從身側響起攻人,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎悬槽,沒想到半個月后怀吻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡初婆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年蓬坡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磅叛。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡屑咳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出弊琴,到底是詐尸還是另有隱情兆龙,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布敲董,位于F島的核電站紫皇,受9級特大地震影響,放射性物質發(fā)生泄漏臣缀。R本人自食惡果不足惜坝橡,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望精置。 院中可真熱鬧计寇,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蝶押,卻和暖如春踱蠢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背棋电。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工茎截, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赶盔。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓企锌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親于未。 傳聞我的和親對象是個殘疾皇子撕攒,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355