consul爱的初体验
Consul是HashiCorp研发的一款服务发现与服务治理工具,常用于分布式系统、微服务和混合云环境。
服务发现,指服务启动后向Consul注册自己,其他服务通过DNS或HTTP API查询可用实例报告服务位置。
服务治理,在分布式微服务架构中,对大量独立服务进行统一管理、控制和优化的一整套机制与方法。
- 服务注册与发现
- 配置与策略管理,内置的KV数据库可以作为运行时的轻量级配置中心功能
- 健康检查,支持TCP|HTTP|Script|TTL心跳的健康检查,监控服务状态
- 服务通信与路由,基于标签的选路机制(相同服务的不同版本),基于名称的选路机制(web-v${x})
- 容错与稳定性治理,服务崩溃策略(超时,重试,熔断,限流,降级)
- 可观测性,提供服务的指标(Metrics),日志(Logs),链路追踪(Tracing)
- 安全与访问控制,支持服务身份验证,零信任通信
consul运行模式: [应用服务] → [Consul客户端agent] → [Consul服务集群]
1.安装与配置
与其他hashicorp产品一样,consul的安装十分简单,官方网站基本针对每种操作系统都有详细的介绍
以ubuntu系统举例,导入hashicorp的公钥,增加官方源后,软件管理工具即可快捷安装
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install consul
consul运行于两种模式的一种,客户端与服务器
服务器配置
# consul.hcl
datacenter = "Datacenter-0"
data_dir = "/opt/consul" // 数据存放位置,低版本该配置不生效,默认存放在/var/lib/consul中
client_addr = "0.0.0.0"
ui_config{
enabled = true // 内置ui界面
}
server = true
bind_addr = "192.168.5.225" // consul服务器集群通信地址,一般多3-5server端同时运行,提供高可用服务
bootstrap_expect=1
connect {
enabled = true
ca_provider = "consul"
}
telemetry {
prometheus_retention_time = "72h"
disable_hostname = true
}
acl = {
enabled = true // 开启访问控制,控制运行连接的consul客户端
default_policy = "deny" // 默认禁止
down_policy = "extend-cache" // 客户端与服务器连接断开,允许读取本地缓存
tokens = {
default = "cf26031b-ced9-d8c7-1c02-1aec1948c3cb" // 允许查询
}
}
consul acl bootstrap // 创建超级权限token
export CONSUL_HTTP_TOKEN=a996cb7b-6c9b-c869-f576-5c5b51eab4ba (简化操作,下面操作遇到权限问题,都使用根权限)
# bootstrap-token,(root-token)无限权限
# agent-token,供agent的server或client在集群里注册自身、注册服务、更新sidecar配置时使用
# policy-token,即普通token,限定权限,例如某个namespace、KV、服务或connect路由的读写权限
# 在创建具体token时,需要提前创建token的策略,即在定义token的使用范围
# agent-policy.hcl, 该策略允许所有节点可被注册和访问,允许所有服务可读
node_prefix "" {
policy = "write"
}
service_prefix "" {
policy = "read"
}
consul acl policy create -name "agent-token" -description "Agent Token Policy" -rules @agent-policy.hcl
consul acl token create -description "Agent Token" -policy-name "agent-token"
客户端配置
Read more...






