Engineering · 1 min read
把憑證送進 Pod:兩段式部署渲染
憑證怎麼從機密儲存服務跑到運行中服務的磁碟上:在部署階段做兩段式渲染,而不是運行時去打機密服務。等應用啟動,憑證早就是一個檔案了。
憑證放在一個機密儲存服務(Vault)裡(這種服務專門集中保管金鑰、憑證這類機密)。問題是它們怎麼從那裡跑到正在運行的服務磁碟上。答案是在部署階段做兩段式渲染,而不是服務運行時去打那個機密服務:
- 拉出來、內嵌階段。 部署當下,一段模板用部署身分把憑證從機密服務裡讀出來,直接把憑證內容貼進部署設定裡。
- 打包階段。 一個部署工具把那份設定變成叢集內的一個機密物件,再把它掛成目錄裡的普通檔案(例如
/…/config/certs)。應用程式就從那裡讀純檔案。
有幾點值得釘清楚:
- 運行中的服務從頭到尾沒跟機密服務講過話。 等應用程式啟動時,憑證早就是磁碟上的一個檔案了,機密服務已經不在畫面裡。
- 負責讀取的是部署身分,不是應用程式。 是部署階段的角色去讀,不是服務運行時自己的角色。
- 不同憑證按用途來自不同簽發者。 對外入口用的是公開、自動續期的憑證;內部服務對服務用的,則是一個內部私有簽發者(定期輪替、有硬性到期日)。
- 機器登入機密服務有兩種樣子。 一種是「一個穩定的帳號 ID,加一個用時才發的密鑰」;另一種是把登入綁在服務的叢集身分上。
這次遷移裡: 這次部署沿用了一個更早的服務的做法,用一段設定從機密服務讀出三個憑證檔(root_ca、certificate、private_key)再掛上去。負責讀的是部署身分,不是應用程式自己的角色。
服務不會自己去拿機密,是部署早就把它放到磁碟上了。
參考來源
延伸閱讀: 它掛上去的三個檔案就是憑證三件套,而對外入口那張憑證也是用同樣的方式自動化的(Ingress 憑證終結)。回到總覽:一張遷移單背後的兩個 SSL。