5.7 Nacos 环境隔离
提到环境,对于咱们写完代码,在本地跑,那就是开发环境,然后把代码放到服务器上跑,那可能就是生产环境了。但是在企业中可跟这有点不一样。
企业更严格,基本上会分为下面三个环境:
开发环境(dev): 开发人员开发用的服务器,是最基础的环境,会保留一些基本的调试信息,也可能会含有非常低级别的日志输出。
测试环境(test): 开发人员开发好后,会让程序在测试环境运行,测试环境就是测试人员用来测试的服务器,是开发环境到生产环境的过渡阶段。
生产环境(prod): 正式对外提供服务的环境,通常会关闭调式信息。
这里大家想一想,开发环境的服务应该允许被生产环境调用吗?那显然是不可以的。
正常来说,这三个环境是需要严格区分开的,也不可能存在通信。Nacos 就提供了 namespace 命名空间来实现环境的隔离,不同的命名空间的服务是互相不可见的,简单来说,不是同一个命名空间的环境不允许互相发现。
5.7.1 创建环境空间
默认的情况,所有的服务都是同一个 namespace,被称为 public。


咱们现在就先创建好三个命名空间,分别是:
- 空间名:dev, 描述:开发环境,ID:DEV
- 空间名:test, 描述:测试环境,ID:TEST
- 空间名:prod,描述:生产环境,ID:PROD
5.7.2 项目中配置环境空间
接下来咱们准备将:
cook-service 配置成 PROD 生产环境,
waiter-service 9090 配置成 DEV 开发环境,
waiter-service 9091 配置成 TEST 测试环境,
waiter-service 9092 配置成 PROD 生产环境。
配置很简单,只需要在对于的项目中的 .yml 文件配置 namespace 配置项就可以了,这后面写咱们设置的命名空间 ID 就 ok 了。
server:
port: 8080
spring:
application:
name: cook-service
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 # nacos 地址
namespace: PROD # 命名空间 ID 设置
loadbalancer:
nacos:
enabled: true # 开启 nacos 的负载均衡策略
server:
port: 9090
spring:
application:
name: waiter-service
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 # 配置 nacos 地址
namespace: DEV # 命名空间 ID 设置
配置完成后(删掉集群名称的配置),启动这四个项目,观察 Nacos 管理面板:

PROD 生产环境有两个服务,DEV 和 TEST 环境中各有一个。
此时去浏览器访问:http://127.0.0.1:8080/cook/ok?content=给55号桌上可乐鸡翅
观察控制台输出日志,能否负载均衡到 waiter-service 9090 或 9091 端口呢?因为只有 waiter-service 9092 与咱们的 cook-service 在同一个命名空间中,所以咱们预期是只有 waiter-service 9092 能收到请求:

结果果然不出所料,只有 waiter-serviec 9092 能被调用。这就是 Nacos 的环境隔离。
6784





