Nacos(/nɑ:kəʊs/,Dynamic Naming and Configuration Service)
由阿里云开源的一个更易于构建云原生应用的动态服务发现
、配置管理
和服务管理平台
,使用Java开发。
介绍
功能:
- 服务发现和服务健康检测
- 服务(Service)是 Nacos 世界的一等公民
- Kubernetes Service
- gRPC & Dubbo RPC Service
- Spring Cloud RESTful Service
- Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查
- 动态配置服务
- 动态 DNS 服务
- 支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务
- 服务及元数据管理
- 服务注册中心 (Service Registry):服务实例在启动时注册到服务注册表,并在关闭时注销
- 配置管理 (Configuration Management)
- 在数据中心中,系统中所有配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动统称为配置管理
其他:
部署
- Nacos 1.X 是老版本,建议您使用2.X版本
- Nacos 依赖 Java、Maven 环境来运行
- 运行需要以至少 2C4g60g*1/3 的机器配置下运行
- https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html
- 集群部署说明
- 数据源:Nacos默认提供Derby以及MySQL的实现
- 使用内置数据源,Derby(Apache Derby是Apache软件基金会所研发的开放源码数据库管理系统;由于Derby是一个纯Java程序,因此只需要操作系统支持Java虚拟机,Derby便可执行),无需进行任何配置
- 使用外置数据源,生产使用建议至少主备模式,或者采用高可用数据库
- 配置文件
{nacos.home}/conf/application.properties
单机部署
在 https://github.com/alibaba/nacos/releases 下载安装包
unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
cd nacos/bin
# 启动
sh startup.sh -m standalone
# 停止
sh shutdown.sh
- 控制台:http://127.0.0.1:8848/nacos/
- 默认的账号密码:
nacos/nacos
- 修改默认用户名/密码方法,在
com.alibaba.nacos.console.utils.PasswordEncoderUtil.main
函数中,将 nacos
改成你要改成的密码,运行即可得到加密有算法
Docker
git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker
export NACOS_VERSION=2.1.2
docker-compose -f example/standalone-derby.yaml up
docker-compose -f example/standalone-mysql-5.7.yaml up
mysql 表结构参考
k8s 部署
API
调用示例
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080' | jq .
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName' | jq .
# 没有服务注册时
{
"name": "DEFAULT_GROUP@@nacos.naming.serviceName",
"groupName": "DEFAULT_GROUP",
"clusters": "",
"cacheMillis": 10000,
"hosts": [],
"lastRefTime": 1582311111116,
"checksum": "",
"allIPs": false,
"reachProtectionThreshold": false,
"valid": true
}
# 服务注册后的结果
{
"name": "DEFAULT_GROUP@@nacos.naming.serviceName",
"groupName": "DEFAULT_GROUP",
"clusters": "",
"cacheMillis": 10000,
"hosts": [
{
"instanceId": "20.18.7.10#8080#DEFAULT#DEFAULT_GROUP@@nacos.naming.serviceName",
"ip": "20.18.7.10",
"port": 8080,
"weight": 1,
"healthy": true,
"enabled": true,
"ephemeral": true,
"clusterName": "DEFAULT",
"serviceName": "DEFAULT_GROUP@@nacos.naming.serviceName",
"metadata": {},
"instanceHeartBeatInterval": 5000,
"instanceIdGenerator": "simple",
"instanceHeartBeatTimeOut": 15000,
"ipDeleteTimeout": 30000
}
],
"lastRefTime": 1582311111116,
"checksum": "",
"allIPs": false,
"reachProtectionThreshold": false,
"valid": true
}
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
HelloWorld
其他:通过 tenant
可以指定namespace ID
认证鉴权
通过配置 NACOS_AUTH_ENABLE=true
启动认证鉴权
curl -X POST '127.0.0.1:8848/nacos/v1/auth/login' -d 'username=nacos&password=nacos'
{
"accessToken": "eyJhbGciOiJIUzI1NiJ9.abc.xyz",
"tokenTtl": 18000,
"globalAdmin": true,
"username": "nacos"
}
- 调用其他接口时,在url后添加参数
accessToken={accessToken}
,其中{accessToken}
为登录时返回的token信息
curl -X GET '127.0.0.1:8848/nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.abc.xyz&dataId=nacos.example.1&group=nacos_group'
NacosSync
NacosSync 是一个支持多种注册中心的同步组件,目前已支持的同步类型:
- Nacos数据同步到Nacos
- Zookeeper数据同步到Nacos
- Nacos数据同步到Zookeeper
- Eureka数据同步到Nacos
- Consul数据同步到Nacos
Nacos DNS
将Nacos上注册的服务导出为DNS域名,参考
扩展
阿里云商业软件实现:
- 应用配置管理(Application Configuration Manangement,简称ACM),已下线
- 微服务引擎MSE(Microservices Engine) Nacos
- 企业级分布式应用服务EDAS(Enterprise Distributed Application Service)