背景
有时候,出于资源的限制或维护方便等因素,我们只部署了一个consul集群。生产环境和开发环境的微服务都使用这一个consul集群,在这种情况下,为了是开发和生成互不影响,该如何实现开发和生产环境的隔离呢?
解决方案
使用不同的Token和Policy来实现隔离。例如,针对 开发 和 生成,分别新建一个token和policy,具体如下
开发环境
创建policy
点击 ALC 菜单,进入Policies页面,创建policy
Name
DepolyDev
Rules
acl = "write"
agent_prefix "" {
policy = "write"
}
event_prefix "" {
policy = "write"
}
key_prefix "" {
policy = "write"
}
keyring = "write"
node_prefix "" {
policy = "write"
}
operator = "write"
query_prefix "" {
policy = "write"
}
service_prefix "dev" {
policy = "write"
intentions = "write"
}
session_prefix "" {
policy = "write"
}
Valid datacenters:选择all
点击 Save,保存。
创建token
进入Tokens页面,创建token
Restrict this token to a local datacenter?
选择 No
Policies
选择刚刚创建的policy:DepolyDev
点击 Save,保存,假设生成Token_dev
生产环境
创建policy
点击 ALC 菜单,进入Policies页面,创建policy
Name
DepolyProd
Rules
acl = "write"
agent_prefix "" {
policy = "write"
}
event_prefix "" {
policy = "write"
}
key_prefix "" {
policy = "write"
}
keyring = "write"
node_prefix "" {
policy = "write"
}
operator = "write"
query_prefix "" {
policy = "write"
}
service_prefix "prod" {
policy = "write"
intentions = "write"
}
session_prefix "" {
policy = "write"
}
Valid datacenters:选择all
点击 Save,保存。
创建token
进入Tokens页面,创建token
Restrict this token to a local datacenter?
选择 No
Policies
选择刚刚创建的policy:DepolyDev
点击 Save,保存,假设生成Token_prod
微服务配置
在 开发环境 部署时,配置微服务使用Token_dev进行服务注册和发现,同时配置服务的AppID以dev为前缀
在 生成环境 部署时,配置微服务使用Token_prod进行服务注册和发现,同时配置服务的AppID以prod为前缀
这样便实现了开发环境和测试环境的隔离。
查看注册的微服务
登录consul,选择ACL菜单,输入token:Token_dev,然后选择Services菜单,便可查看开发环境注册的微服务了;如果要查看生成环境注册的微服务,输入token:Token_prod即可。