consul服务注册

一 服务定义

https://www.consul.io/docs/discovery/services#security-configurations

1.1 service

这是定义服务的根级参数。您可以指定参数来配置服务。

范围 描述 默认 必需的
id 指定服务 ID 的字符串值。

如果未指定,name将使用该字段的值。

每个节点的服务必须具有唯一的 ID,因此如果默认值name会与其他服务冲突,您应该指定唯一的值。

Value of the name parameter 可选的
name 指定服务的名称。
如果id未指定参数,则此参数的值用作 ID 。
我们建议对服务定义名称使用有效的 DNS 标签,以便与外部 DNS 兼容。
None 必需的
tags 可用于添加服务级别标签的字符串值列表。
例如,您可以定义区分的标签primarysecondary节点或服务版本。
我们建议为服务定义 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字符(AZaz09_-)。
键不能有特殊字符。
密钥限制为 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

 

posted @ 2021-11-25 21:25  小吉猫  阅读(2215)  评论(0编辑  收藏  举报