docker-compose#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| consul:
image: consul:latest
container_name: consul
ports:
- "8300:8300"
- "8301:8301"
- "8302:8302"
- "8500:8500"
- "8600:8600"
volumes:
- /docker-data/consul-data:/consul/data
command: agent -server -ui -node=nsn -bootstrap-expect=1 -client=0.0.0.0 -advertise=124.222.162.210 -datacenter=nebula
restart: always
networks:
common-net:
aliases:
- consul
|
端口详解#
- 8300: 集群中各个节点相互通信
- 8301: 节点之间健康检查等交互
- 8302: 数据中心之间的信息同步
- 8500: 网页管理界面访问
- 8600: DNS服务器访问
参数详解#
agent
启动一个Agent-server
该节点类型为Server节点,不指定则为Client节点-ui
开启网页可视化管理界面-node
指定该节点名称(不可重复)-bootstrap-expect
最少集群的Server节点数量,少于这个值则集群失效,单机则设为1,client节点可以不设置-advertise
指定本节点外网地址,本机部署可省略-client
指定外部连接地址,0.0.0.0表示外网全部可以连接-datacenter
指定数据中心名,同一个数据中心中的节点应一致
节点类型#
Server
节点:这是Consul集群的核心组成部分,用于维护集群的状态、处理查询请求、执行一致性协议以及提供服务发现和健康检查等功能Client
节点:用于向集群提交查询请求,并将请求转发给Server节点处理,作为服务发现和健康检查的代理,这类节点有着负载均衡、健康检查和故障转移等作用,降低Server节点的压力,搭建集群时,Client节点不是必须的
节点通过 docker exec -it consul consul join 节点IP
来加入其他节点
基本使用#
配置ACL#
开启ACL#
进入consul容器,在/consul/config/
下创建config.json
文件并写入以下内容
1
2
3
4
5
6
7
8
9
10
| {
"acl": {
"enabled": true,
"default_policy": "allow",
"enable_token_persistence": true,
"tokens": {
"master": "密钥"
}
}
}
|
密钥是可以是任意字符串
配置策略#
允许对所有节点、服务、键值存储、代理、会话的读写操作#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| node_prefix "" {
policy = "write"
}
service_prefix "" {
policy = "write"
}
key_prefix "" {
policy = "write"
}
agent_prefix "" {
policy = "write"
}
session_prefix "" {
policy = "write"
}
|
允许对所有节点、服务、键值存储、代理、会话的读写操作#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| node_prefix "" {
policy = "read"
}
service_prefix "" {
policy = "read"
}
key_prefix "" {
policy = "read"
}
agent_prefix "" {
policy = "read"
}
session_prefix "" {
policy = "read"
}
|