Vault
vault-1.3.1 版本为例, 运用于 SpringCloudConfig
介绍
By HashiCrop,Vault 是一种密钥存储的服务工具软件, 如大量的账户名, 密码, Key \ 加密 Key 等, 它有灵活的权限控制, 详细的操作记录, 历史版本等. 目前是有商用版和开源版提供, 即支持命令行操作又支持 UI 管理界面, 十分成熟且有好些年头了, 支持命令行操作和 web 管理.
官网: hashicorp-vault, 代码库: vault-GitHub
安装使用
Vault 是 HashiCrop 公司推出, 他们公司还有个产品叫: Consul, 相信这个肯定知道的.
image
对于敢在官网直接放 GitHub 社区源代码链接的公司, 天然有好感. 官网菜单有个 "learn" 选项里面有非常详细的安装, 启动, 使用文档 (都是英文), 按着一步步很轻松就能掌握 Vault. 在国内访问网站经常会连不上, 他们还没有提供 PDF 下载, 对于新手来说会有掉链子的感觉.
安装的是 1.3.1 版本 (目前最新了), 配置分享给大家看看. 实施的具体步骤就不说了, 官网已经在傻瓜式介绍了, 再啰嗦没有意义. 它的配置采用他们自定义的 HCL 语法, 代码也是采用 Go 编写同时开源了.
- disable_mlock = true
- ui = true
- storage "mysql" {
- address = "127.0.0.1:3306"
- username = "mysql"
- password = "mysql"
- database = "vault"
- ha_enabled = "true"
- }
- listener "tcp" {
- address = "127.0.0.1:8200"
- tls_disable = 1
- tls_disable_client_certs = 1
- }
- cluster_name = "cluter_vault"
- disable_cache = true
- log_level = "Debug"
- api_addr = "http://127.0.0.1:8200"
吐槽一下官网文档中关于 API 这块就是坑, 文档对于 URL 的 PATH 描述和示例都是错误的, 如下:
- $ curl \
- -H "X-Vault-Token: f3b09679-3001-009d-2b80-9c306ab81aa6" \
- -X GET \
- http://127.0.0.1:8200/v1/secret/foo
在 path 中是有关键字段的, 如 "data", 看下图:
image
官网在 API 请求路径描述上是错误的 (应该是没及时更新), 实在是害人不浅, 但有个 help 接口是正确的可以帮助理解 path 的格式规范, 如: http://localhost:8200/v1/secret/?help=1. 作为 SpringCloudConfig 选项后台, 目前到 data 层面的保存使用已经跑通也基本够使用, 其他的后续再慢慢摸索.
支持多种存储
下面列出常规的选择, 其他等详细可以去官网看:>>> 点击跳转 <<<
- Consul
- Etcd
- Zookeeper
- MySQL\MSSQL
- Filesystem
前三种 1,2,3 是比较靠谱方式, 稳定性自不用说, 很多公司用来做服务的注册与发现集群 (可能它们还有存储的功能), 根据自己情况定.
4 是传统数据库代表, 一般选用 MySQL, 因为会使用的人远远不只是工程师和 DBA, 普用性高且稳定可靠. 5 是最简单的存储选型了, 相当于本地化了, 与服务器绑定, 迁移备份需要自己思考做方案.
推荐 MySQL, 其次 1,2,3 方案. cloud-parent/cloud-service-config-vault 项目中采用的是 MySQL 方案.
MySQL 方案会涉及两张表: vault\vault_lock.vault 是核心表, 数据存储格式一律是 "BLOB", 安全稳定谁也别想改. 迁移也简单了, 直接 Copy.
image
总结
思考定位: 使用简单, 稳定可靠, HA, 数据备份.
在 SpringCloudConfig 后台选型中比较看好 GitLab 和 Vault, 相对来说个人更喜欢 Vault, 但集成难度和学习成本比不了 GitLab 轻松简单. 作为企业 DevOps 一体化方案的一部分还是以 GitLab 为中心选型好些, 毕竟 CI\CD 放在那且大多数工程师都会 Git.
来源: http://www.jianshu.com/p/587ac0575ba7