关于如何在Nomad中保护工作部署的工作流的简要历史
許多HashiCorp用戶和員工都喜歡我們的整套產品,但就像您的祖母一樣,幾乎不可能不對我們的某一個產品有一點偏愛(最喜歡的孫子說)。
在我的例子中,我對HashiCorp Nomad的偏愛是很明顯的,甚至在歐洲團隊中是一個持續的笑話。我想,每一次客戶會議都會有人說:“是啊,這就是Nomad, Nico最喜歡的產品……”
因此,你可以想象我的興奮之情,去年9月,Armon 上臺公開宣布了Nomad 0.7發布的過多特性。我終于對企業調度程序有了完整的認識。配額和命名空間將企業客戶本來就很低的操作開銷降至最低,ACLs將提供對開放源碼用戶的安全訪問。關于最后一點,就在我拍攝這張照片的時候,我有了一個短暫的頓悟(并沒有很多人有這些照片的真實記錄)。一個團隊如何運作ACLs?
- 操作人員可以為進行部署的用戶和系統(如CI管道)創建長壽命的令牌。絕對不會。
- 共享令牌?別讓我開始。
- 為用戶構建LDAP集成,為機器構建長時間使用的令牌。聽起來有很多工作要做。
如果我們有一種能夠代理憑證訪問的技術,并且已經有了一種方法,可以使用LDAP(用于用戶)和EC2工作人員(在技術上也可以在Nomad中運行)來建立身份。等等,我們的確有一些東西能做到。HashiCorp Vault實際上是最合適的選擇。我已經在腦子里玩這些流程了:
只有一個小問題,我們(當時)沒有一個Nomad的Secret引擎。關于這家公司,你肯定需要知道的一點是,一個好的想法永遠都是不夠的,你需要執行它。因此,由于缺乏Vault的內部知識,而且從未寫過一行Go,我就去了。
結果證明了Vault是多么的神奇,就在我編寫代碼的時候,這個東西似乎在工作,大約3個小時后,Vault實際上生成并撤銷了Nomad標記。稍后的長代碼回顧(https://github.com/hashicorp/vault/pull/3401)將秘密引擎合并到0.9.1中。讓我們快速看看如何快速設置它。
當然,ACLs需要通過配置文件中的acl節在Nomad中啟用:
acl {enabled = truetoken_ttl = "30s"policy_ttl = "60s" }應該為ACLs引導集群,并且應該有一個初始管理令牌。值得注意的是,初始管理令牌可以被撤銷,但它可能會修改子令牌,所以您很可能不想將該令牌交給Vault,而是生成一個可以獨立管理的子令牌:
$ NOMAD_TOKEN=${INITIAL MANAGEMENT TOKEN} nomad acl token create -type=management Accessor ID = 5f7d8875-1bf9-ed80-c8c3-e4e6e20c2408 Secret ID = ea83681b-9ca8-4393-999f-a25731ad3b55 Name = <none> Type = management Global = false Policies = n/a Create Time = 2018-03-17 11:36:12.696245 +0000 UTC Create Index = 8 Modify Index = 8您還應該在Nomad中創建一組策略,因為Vault將利用這些策略最終創建令牌,在本例中,您可以創建一個示例策略,如下所示:
namespace "default" {policy = "read" } agent {policy = "read" } node {policy = "read" }并將其引入Nomad:
$ NOMAD_TOKEN=${INITIAL MANAGEMENT TOKEN} nomad acl policy apply policyone ./payload.json Successfully wrote "policyone" ACL policy!現在開始配置Vault。首先將nomad秘密引擎安裝到一個掛載點,并配置到nomad的連接:
$ vault mount nomad Successfully mounted 'nomad' at 'nomad'! $ vault write nomad/config/access \address=http://127.0.0.1:4646 \token=adf4238a-882b-9ddc-4a9d-5b6758e4159e Success! Data written to: nomad/config/access現在在Vault中創建一個角色來發布與我們剛剛創建的Nomad策略相關聯的Nomad標記:
$ vault write nomad/role/role-name policy=policyone Success! Data written to: nomad/roles/role-name以及一個Vault策略,用于生成Vault令牌,允許在此角色中創建Nomad令牌:
$ echo 'path "nomad/creds/role-name" {capabilities = ["read"] }' | vault policy-write nomad-user-policy - Policy 'nomad-user-policy' written.例如,作為最后一步,您可以只生成一個與策略相關聯的Vault令牌,并檢索一個Nomad令牌,如下所示:
$ vault token-create -policy=nomad-user-policy Key Value --- ----- token deedfa83-99b5-34a1-278d-e8fb76809a5b token_accessor fd185371-7d80-8011-4f45-1bb3af2c2733 token_duration 768h0m0s token_renewable true token_policies [default nomad-user-policy] $ vault read nomad/creds/role-name Key Value --- ----- lease_id nomad/creds/test/6fb22e25-0cd1-b4c9-494e-aba330c317b9 lease_duration 768h0m0s lease_renewable true accessor_id 10b8fb49-7024-2126-8683-ab355b581db2 secret_id 8898d19c-e5b3-35e4-649e-4153d63fbea9這種技術可以與任何通過Vault進行身份驗證的東西結合使用,最終為Nomad管理和調度提供一個非常安全的工作流。
您是否有興趣告訴別人您的HashiCorp故事,或者HashiCorp產品如何幫助您構建了令人驚奇的東西?讓我們知道。把你的故事或想法發郵件到guestblogs@hashicorp.com
總結
以上是生活随笔為你收集整理的关于如何在Nomad中保护工作部署的工作流的简要历史的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HashiCorp Nomad和遗留系统
- 下一篇: BaaS后端即服务 - 分析篇