consul服务注册
一 服务定义
https://www.consul.io/docs/discovery/services#security-configurations
1.1 service
这是定义服务的根级参数。您可以指定参数来配置服务。
范围 | 描述 | 默认 | 必需的 |
---|---|---|---|
id |
指定服务 ID 的字符串值。
如果未指定, 每个节点的服务必须具有唯一的 ID,因此如果默认值 |
Value of the name parameter |
可选的 |
name |
指定服务的名称。 如果 id 未指定参数,则此参数的值用作 ID 。我们建议对服务定义名称使用有效的 DNS 标签,以便与外部 DNS 兼容。 |
None | 必需的 |
tags |
可用于添加服务级别标签的字符串值列表。 例如,您可以定义区分的标签 primary 和secondary 节点或服务版本。我们建议为服务定义 ID 使用有效的 DNS 标签,以便与外部 DNS 兼容。 标签值对 Consul 是不透明的。 |
None | 可选的 |
address |
指定特定于服务的 IP 地址或主机名的字符串值。 如果未指定值,则默认使用代理节点的 IP 地址。 此参数没有服务端验证。 |
代理节点的IP地址 | 可选的 |
meta |
定义最多 64 个键/值对的映射的对象。 元对象与节点定义中的节点元对象具有相同的限制。 可以根据服务的各个实例检索元数据。给定服务的所有实例都有自己的元数据副本。 有关支持的参数,请参阅添加元数据。 |
None | 可选的 |
tagged_addresses |
标记地址是可以为节点或服务定义的附加地址。有关详细信息,请参阅标记地址。 | None | 可选的 |
port |
指定服务特定端口号的整数值。address 定义参数时应指定端口号,以提高服务的可发现性。 |
可选的 | |
socket_path |
指定服务套接字路径的字符串值。 如果服务在 Unix 域套接字上侦听,则指定此参数以将服务公开给网格。 |
None | 可选的 |
enable_tag_override |
确定是否启用服务的反熵功能的布尔值。 如果设置为 true ,则外部代理可以更新目录中的此服务并修改标签。此代理的后续本地同步操作将忽略更新的标签。 该参数仅适用于本地注册的服务。如果多个节点注册了同一个服务,则 enable_tag_override 配置和所有其他服务配置项独立运行。更新在一个节点上注册的服务的标签独立于在另一个节点上注册的相同服务(按名称)。 有关其他信息,请参阅反熵同步。 |
False | 可选的 |
checks |
定义服务运行状况检查的对象数组。有关详细信息,请参阅运行状况检查。 | None | 可选的 |
kind |
将服务标识为 Connect 代理的字符串值。有关详细信息,请参阅连接。 | None | 可选的 |
proxy_destination |
字符串值,指定当前配置的服务代理到的目标服务的名称。 此参数已弃用。使用 proxy.destination_service 来代替。有关其他信息,请参阅连接。 |
None | 可选的 |
proxy |
定义当前配置的服务代理到的目标服务的对象。有关其他信息,请参阅代理。 | None | 可选的 |
connect |
配置 Consul Connect 服务网格连接的对象。有关详细信息,请参阅连接。 | None | 可选的 |
weights |
根据 DNS 服务 (SRV) 响应配置服务权重的对象。有关详细信息,请参阅DNS SRV 权重。 | None | 可选的 |
token |
指定用于注册服务的 ACL 令牌的字符串值(如果启用了 ACL 系统)。服务与服务目录交互需要令牌。有关详细信息,请参阅安全配置。 | None | 如果启用了 ACL,则需要 |
namespace |
指定应在其中注册服务的 Consul 命名空间的字符串值。有关详细信息,请参阅安全配置。 | None | 可选的 |
1.2 元数据
您可以使用meta
参数向服务添加语义元数据。此参数定义最多 64 个键/值对的映射。您可以指定以下参数来定义服务的元数据。
范围 | 描述 | 默认 | 必需的 |
---|---|---|---|
KEY |
向服务添加语义元数据的字符串值。 钥匙只能有ASCII字符( A - Z ,a - z ,0 - 9 ,_ 和- )。键不能有特殊字符。 密钥限制为 128 个字符。 值限制为 512 个字符。 |
1.3 server定义样例
查看代码
{
"service": {
"id": "redis",
"name": "redis",
"tags": ["primary"],
"address": "",
"meta": {
"meta": "for my service"
},
"tagged_addresses": {
"lan": {
"address": "192.168.0.55",
"port": 8000,
},
"wan": {
"address": "198.18.0.23",
"port": 80
}
},
"port": 8000,
"socket_path": "/tmp/redis.sock",
"enable_tag_override": false,
"checks": [
{
"args": ["/usr/local/bin/check_redis.py"],
"interval": "10s"
}
],
"kind": "connect-proxy",
"proxy_destination": "redis", // Deprecated
"proxy": {
"destination_service_name": "redis",
"destination_service_id": "redis1",
"local_service_address": "127.0.0.1",
"local_service_port": 9090,
"local_service_socket_path": "/tmp/redis.sock",
"mode": "transparent",
"transparent_proxy": {
"outbound_listener_port": 22500
},
"config": {},
"upstreams": [],
"mesh_gateway": {
"mode": "local"
},
"expose": {
"checks": true,
"paths": [
{
"path": "/healthz",
"local_path_port": 8080,
"listener_port": 21500,
"protocol": "http2"
}
]
}
},
"connect": {
"native": false,
"sidecar_service": {}
"proxy" : { // 弃用
"command" : [ ] ,
"config" : { }
}
} ,
"weights" : {
"passing" : 5 ,
"warning" : 1
} ,
"token" : "233b604b-b92e -48c8-a253-5f11514e4b50" ,
"namespace" : "foo"
}
}
二 json方式注册
2.1 准备k8s-json文件
点击查看代码
root@consul-01:~# cat k8s-master.json
{
"services": [
{
"id": "node_exporter-k8s-master-01",
"name": "k8s-master-01",
"address": "192.168.174.100",
"port": 9100,
"tags": ["k8s-master"],
"checks": [{
"http": "http://192.168.174.100:9100/metrics",
"interval": "5s"
}]
},
{
"id": "node_exporter-k8s-master-02",
"name": "k8s-master-02",
"address": "192.168.174.101",
"port": 9100,
"tags": ["k8s-master"],
"checks": [{
"http": "http://192.168.174.101:9100/metrics",
"interval": "5s"
}]
},
{
"id": "node_exporter-k8s-master-03",
"name": "k8s-master-03",
"address": "192.168.174.102",
"port": 9100,
"tags": ["k8s-master"],
"checks": [{
"http": "http://192.168.174.102:9100/metrics",
"interval": "5s"
}]
}
]
}
2.2 查看当前节点状态
2.3 复制k8s-master.json到consul配置目录
root@consul-01:~# cp k8s-master.json /etc/consul.d/
root@consul-01:~# chown consul.consul /etc/consul.d/k8s-master.json
2.4 consul重新加载
root@consul-01:~# systemctl reload consul
2.5 验证consul web界面
三 HTTP API动态注册
https://www.consul.io/api-docs/agent/service#register-service
3.1 准备k8s-node.json
{
"id": "node_exporter-k8s-node-01",
"name": "k8s-node-01",
"address": "192.168.174.106",
"port": 9100,
"tags": ["k8s-node"],
"checks": [{
"http": "http://192.168.174.106:9100/metrics",
"interval": "5s"
}]
}
3.2 验证当前节点状态
3.3 HTTP注册服务
root@consul-01:~# curl --request PUT --data @k8s-node.json http://192.168.174.103:8500/v1/agent/service/register
3.4 验证consul web界面
四 json文件反注册
https://www.consul.io/api-docs/agent/service#deregister-service
4.1 验证当前状态
4.2 删除k8s-master.json
root@consul-01:~# rm -rf /etc/consul.d/k8s-master.json
4.3 从新加载consul
root@consul-01:~# systemctl reload consul
4.4 验证当前状态
五 HTTP API 反注册
5.1 查看当前状态
5.2 HTTP API 反注册
root@consul-01:~# curl -X PUT http://192.168.174.103:8500/v1/agent/service/deregister/node_exporter-k8s-node-01
5.3 验证当前状态
六 KV 存储
6.1 注册kv
6.1.1 准备数据
admin:
profile_path: /tmp/envoy.prof
access_log_path: /tmp/admin_access.log
address:
socket_address:
address: 0.0.0.0
port_value: 9901
6.1.2 注册kv
# curl --request PUT --data @test.yaml http://127.0.0.1:8500/v1/kv/test.yaml
true
6.2 查询kv
# curl http://127.0.0.1:8500/v1/kv/test.yaml
[
{
"LockIndex":0,
"Key":"test.yaml",
"Flags":0,
"Value":"YWRtaW46ICBwcm9maWxlX3BhdGg6IC90bXAvZW52b3kucHJvZiAgYWNjZXNzX2xvZ19wYXRoOiAvdG1wL2FkbWluX2FjY2Vzcy5sb2cgIGFkZHJlc3M6ICAgIHNvY2tldF9hZGRyZXNzOiAgICAgICBhZGRyZXNzOiAwLjAuMC4wICAgICAgIHBvcnRfdmFsdWU6IDk5MDE=",
"CreateIndex":15888,
"ModifyIndex":15888
}
]
# curl http://127.0.0.1:8500/v1/kv/test.yaml?raw
admin:
profile_path: /tmp/envoy.prof
access_log_path: /tmp/admin_access.log
address:
socket_address:
address: 0.0.0.0
port_value: 9901
6.3 删除kv
# curl --request DELETE http://127.0.0.1:8500/v1/kv/test.yaml
true