一 服務定義
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