部署


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"
}