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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM