要使用Apollo,第一步需要创建项目。
点击提交
创建成功后,会自动跳转到项目首页
项目管理员拥有以下权限:
创建项目时填写的应用负责人默认会成为项目的管理员之一,如果还需要其他人也成为项目管理员,可以按照下面步骤操作:
配置权限分为编辑和发布:
项目创建完,默认没有分配配置的编辑和发布权限,需要项目管理员进行授权。
编辑配置需要拥有这个Namespace的编辑权限,如果发现没有新增配置按钮,可以找项目管理员授权。
Apollo除了支持表格模式,逐个添加、修改配置外,还提供文本模式批量添加、修改。 这个对于从已有的properties文件迁移尤其有用。
配置只有在发布后才会真的被应用使用到,所以在编辑完配置后,需要发布配置。
发布配置需要拥有这个Namespace的发布权限,如果发现没有发布按钮,可以找项目管理员授权。
配置发布成功后,应用就可以通过Apollo客户端读取到配置了。
Apollo目前提供Java客户端,具体信息请点击Java客户端使用文档:
如果应用使用了其它语言,也可以通过直接访问Http接口获取配置,具体可以参考其它语言客户端接入指南
如果发现已发布的配置有问题,可以通过点击『回滚』按钮来将客户端读取到的配置回滚到上一个发布版本。
这里的回滚机制类似于发布系统,发布系统中的回滚操作是将部署到机器上的安装包回滚到上一个部署的版本,但代码仓库中的代码是不会回滚的,从而开发可以在修复代码后重新发布。
Apollo中的回滚也是类似的机制,点击回滚后是将发布到客户端的配置回滚到上一个已发布版本,也就是说客户端读取到的配置会恢复到上一个版本,但页面上编辑状态的配置是不会回滚的,从而开发可以在修复配置后重新发布。
公共组件是指那些发布给其它应用使用的客户端代码,比如CAT客户端、Hermes Producer客户端等。
虽然这类组件是由其他团队开发、维护,但是运行时是在业务实际应用内的,所以本质上可以认为是应用的一部分。
通常情况下,这类组件所用到的配置由原始开发团队维护,不过由于实际应用的运行时、环境各不一样,所以我们也允许应用在实际使用时能够覆盖公共组件的部分配置。
公共组件的接入步骤,和普通应用几乎一致,唯一的区别是公共组件需要创建自己唯一的Namespace。
所以,首先执行普通应用接入文档中的以下几个步骤,然后再按照本章节后面的步骤操作。
创建Namespace需要项目管理员权限,如果发现没有添加Namespace按钮,可以找项目管理员授权。
点击页面左侧的添加Namespace
点击“创建新的Namespace”
输入公共组件的Namespace名称,需要注意的是Namespace名称全局唯一
点击提交后,页面会自动跳转到关联Namespace页面
关联成功后,页面会自动跳转到Namespace权限管理页面
点击“返回”回到项目页面
编辑配置需要拥有这个Namespace的编辑权限,如果发现没有新增配置按钮,可以找项目管理员授权。
这部分和普通应用一致,具体步骤请参见1.3.2 通过文本模式编辑。
配置只有在发布后才会真的被应用使用到,所以在编辑完配置后,需要发布配置。
发布配置需要拥有这个Namespace的发布权限,如果发现没有发布按钮,可以找项目管理员授权。
配置发布成功后,应用就可以通过Apollo客户端读取到配置了。
Apollo目前提供Java客户端,具体信息请点击Java客户端使用文档:
如果应用使用了其它语言,也可以通过直接访问Http接口获取配置,具体可以参考其它语言客户端接入指南
对于公共组件的配置读取,可以参考上述文档中的“获取公共Namespace的配置”部分。
前面提到,通常情况下,公共组件所用到的配置由原始开发团队维护,不过由于实际应用的运行时、环境各不一样,所以我们也允许应用在实际使用时能够覆盖公共组件的部分配置。
这里就讲一下应用如何覆盖公用组件的配置,简单起见,假设apollo-portal应用使用了hermes producer客户端,并且希望调整hermes的批量发送大小。
进入使用公共组件的应用项目首页,点击左侧的添加Namespace按钮
关联成功后,页面会自动跳转到Namespace权限管理页面
点击“返回”回到项目页面
配置只有在发布后才会真的被应用使用到,所以在编辑完配置后,需要发布配置。
发布配置需要拥有这个Namespace的发布权限,如果发现没有发布按钮,可以找项目管理员授权。
在有些特殊情况下,应用有需求对不同的集群做不同的配置,比如部署在A机房的应用连接的es服务器地址和部署在B机房的应用连接的es服务器地址不一样。
在这种情况下,可以通过在Apollo创建不同的集群来解决。
创建集群需要项目管理员权限,如果发现没有添加集群按钮,可以找项目管理员授权。
点击页面左侧的“添加集群”按钮
输入集群名称,选择环境并提交
切换到对应的集群,修改配置并发布即可
通过上述配置,部署在SHAJQ机房的应用就会读到SHAJQ集群下的配置
如果应用还在其它机房部署了应用,那么在上述的配置下,会读到default集群下的配置。
在一些情况下,尽管应用本身不是公共组件,但还是需要在多个AppId之间共用同一份配置,比如同一个产品的不同项目:XX-Web, XX-Service, XX-Job等。
这种情况下如果希望实现多个AppId使用同一份配置的话,基本概念和公共组件的配置是一致的。
具体来说,就是在其中一个AppId下创建一个namespace,写入公共的配置信息,然后在各个项目中读取该namespace的配置即可。
如果某个AppId需要覆盖公共的配置信息,那么在该AppId下关联公共的namespace并写入需要覆盖的配置即可。
具体步骤可以参考公共组件接入指南。
通过灰度发布功能,可以实现:
下面将结合一个实际例子来描述如何使用灰度发布功能。
100004458(apollo-demo)项目有两个客户端:
灰度目标:
首先点击application namespace右上角的创建灰度
按钮。
点击确定后,灰度版本就创建成功了,页面会自动切换到灰度版本
Tab。
点击主版本的配置
中,timeout配置最右侧的对此配置灰度
按钮
在弹出框中填入要灰度的值:3000,点击提交。
切换到灰度规则
Tab,点击新增规则
按钮
在弹出框中灰度的IP
下拉框会默认展示当前使用配置的机器列表,选择我们要灰度的IP。
除了IP维度以外,从2.0.0版本开始还支持通过label来标识灰度的实例列表,适用于IP不固定的场景如Kubernetes
。
手动输入想要设置的label标签,输入完成后点击点击添加按钮。
上述规则配置后,灰度配置会对AppId为100004458
,IP为10.32.21.22
或者Label
标记为myLabel
或appLabel
的实例生效。
关于
Label
如何标记,可以参考ApolloLabel的配置说明。
如果下拉框中没找到需要的IP,说明机器还没从Apollo取过配置,可以点击手动输入IP来输入,输入完后点击添加按钮
注:对于公共Namespace的灰度规则,需要先指定要灰度的appId,然后再选择IP和Label。
配置规则已经生效,不过灰度配置还没有发布。切换到配置
Tab。
再次检查灰度的配置部分,如果没有问题,点击灰度发布
。
在弹出框中可以看到主版本的值是2000,灰度版本即将发布的值是3000。填入其它信息后,点击发布。
发布后,切换到灰度实例列表
Tab,就能看到10.32.21.22已经使用了灰度发布的值。
切换到主版本
的实例列表
,会看到主版本配置只有10.32.21.19在使用了。
后面可以继续配置的修改或规则的更改。配置的修改需要点击灰度发布后才会生效,规则的修改在规则点击完成后就会实时生效。
如果灰度的配置测试下来比较理想,符合预期,那么就可以操作全量发布
。
全量发布的效果是:
我选择了不保留灰度版本,所以发布完的效果就是主版本的配置更新、灰度版本删除。点击主版本的实例列表,可以看到10.32.21.22和10.32.21.19都使用了主版本最新的配置。
如果灰度版本不理想或者不需要了,可以点击放弃灰度
。
点击主版本的发布历史
按钮,可以看到当前namespace的主版本以及灰度版本的发布历史。
从1.1.0版本开始,apollo-portal增加了查看权限的支持,可以支持配置某个环境只允许项目成员查看私有Namespace的配置。
这里的项目成员是指:
配置方式很简单,用超级管理员账号登录后,进入管理员工具 - 系统参数
页面新增或修改configView.memberOnly.envs
配置项即可。
Apollo从1.6.0版本开始增加访问密钥机制,从而只有经过身份验证的客户端才能访问敏感配置。如果应用开启了访问密钥,客户端需要配置密钥,否则无法获取配置。
客户端侧配置访问密钥
配置中心作为基础服务,存储着公司非常重要的配置信息,所以安全因素需要大家重点关注,下面列举了一些注意事项供大家参考,也欢迎大家分享自己的实践案例。
建议接入公司统一的身份认证系统,如 SSO、LDAP 等,接入方式可以参考Portal 实现用户登录功能
如果使用Apollo提供的Spring Security简单认证,务必记得要修改超级管理员apollo的密码
Apollo 支持细粒度的权限控制,请务必根据实际情况做好权限控制:
除了用户权限,在系统访问上也需要加以考虑: