HashiCorp Consul HTTP API 操作指南。提供服务发现、KV 存储、健康检查和服务网格管理能力。
Base URL: http://127.0.0.1:8500/v1/
认证方式:
# 方式 1: X-Consul-Token header (推荐)
curl -H "X-Consul-Token: <token>" http://127.0.0.1:8500/v1/agent/members
# 方式 2: Bearer token
curl -H "Authorization: Bearer <token>" http://127.0.0.1:8500/v1/agent/members
常用查询参数:
dc - 指定数据中心ns - 指定命名空间 (Enterprise)pretty - 格式化 JSON 输出wait= - 阻塞查询等待时间index= - 阻塞查询索引GET /catalog/services
GET /catalog/services?dc=dc1
返回: {"service-name": ["tag1", "tag2"], ...}
GET /catalog/service/:service_name
GET /catalog/service/redis?dc=dc1&ns=default
GET /catalog/nodes
GET /catalog/nodes?near=_agent
PUT /catalog/register
{
"Node": "node1",
"Address": "192.168.1.1",
"Service": {
"Service": "redis",
"ID": "redis-1",
"Tags": ["primary", "v1"],
"Address": "127.0.0.1",
"Port": 6379
}
}
PUT /catalog/deregister
{
"Node": "node1",
"ServiceID": "redis-1"
}
GET /kv/:key # 单个 key
GET /kv/:prefix?recurse # 递归读取前缀下所有 key
GET /kv/:prefix?keys # 只返回 key 列表
GET /kv/:key?raw # 返回原始值 (text/plain)
返回值是 base64 编码,需解码:
curl -s http://127.0.0.1:8500/v1/kv/my-key | jq -r '.[0].Value' | base64 -d
PUT /kv/:key
PUT /kv/:key?flags=123 # 附加 flags
PUT /kv/:key?cas=100 # Check-And-Set (乐观锁)
curl -X PUT -d 'my value' http://127.0.0.1:8500/v1/kv/my-key
DELETE /kv/:key # 删除单个 key
DELETE /kv/:prefix?recurse # 删除前缀下所有 key
DELETE /kv/:key?cas=100 # Check-And-Set 删除
# 获取锁
PUT /kv/:key?acquire=<session-id>
# 释放锁
PUT /kv/:key?release=<session-id>
GET /health/node/:node
GET /health/checks/:service
GET /health/checks/redis?passing # 只返回 passing 状态
GET /health/service/:service
GET /health/service/redis?passing # 只返回健康实例
GET /health/state/passing
GET /health/state/warning
GET /health/state/critical
GET /health/state/any
健康状态: passing, warning, critical
PUT /acl/create
{
"Name": "my-token",
"Type": "client",
"Rules": "key \"secret/\" { policy = \"read\" }"
}
GET /acl/list
GET /acl/token/self # 当前 token 信息
GET /acl/token/:accessor_id
PUT /acl/token/:accessor_id
GET /agent/members
GET /agent/self
GET /agent/services
GET /agent/service/:service_id
PUT /agent/service/register
{
"Name": "redis",
"ID": "redis-1",
"Tags": ["primary"],
"Address": "127.0.0.1",
"Port": 6379,
"Check": {
"HTTP": "http://localhost:6379/health",
"Interval": "10s"
}
}
PUT /agent/service/deregister/:service_id
GET /catalog/connect/:service
GET /health/connect/:service?passing
GET /health/ingress/:service
GET /connect/intentions
POST /connect/intention
{
"SourceName": "web",
"DestinationName": "db",
"Action": "allow"
}
DELETE /connect/intention/:id
PUT /session/create
{
"Name": "my-lock",
"TTL": "30s",
"Behavior": "delete"
}
返回: {"ID": "session-uuid"}
GET /session/info/:session-id
GET /session/node/:node
PUT /session/destroy/:session-id
原子操作多个 KV 或 Catalog 操作:
PUT /txn
[
{"KV": {"Verb": "set", "Key": "key1", "Value": "dGVzdA=="}},
{"KV": {"Verb": "get", "Key": "key2"}},
{"Service": {"Verb": "register", "Service": {...}}}
]
支持的 Verb:
set, get, delete, check-index, lock, unlockregister, deregister使用 index 或 wait 实现长轮询:
# 等待 key 变化
GET /kv/my-key?index=100
GET /kv/my-key?wait=5m&index=100
响应头 X-Consul-Index 返回当前索引。
常见 HTTP 状态码:
200 - 成功404 - 资源不存在400 - 请求格式错误403 - ACL 权限不足500 - 服务器错误响应头:
X-Consul-Index - 当前状态索引X-Consul-KnownLeader - 是否有已知 leaderX-Consul-LastContact - 最后联系 leader 的时间X-Consul-Default-ACL-Policy - 默认 ACL 策略For detailed API specifications, see:
共 1 个版本