开了五台云主机,总体规划为下面,角色那有条件的可以分开,例如 client 单独一台。不分开的话得配置 client 的端口和 server 的分开,自己去探索
IP
Hostname
CPU
Memory
role
nodeName
172.19.0.3
consul1
4
8G
server
172.19.0.3
172.19.0.4
consul2
4
8G
server
172.19.0.4
172.19.0.5
consul3
4
8G
server
172.19.0.5
172.19.0.8
consul4
2
4G
client
172.19.0.8
172.19.0.9
consul5
2
4G
client
172.19.0.9
利用Consul提供的服务实现服务的注册与发现,需要建立 Consul Cluster。在 Consul 方案中,每个提供服务的节点上都要部署和运行 Consul 的 agent,所有运行 Consul agent 节点的集合构成 Consul Cluster。Consul agent 有两种运行模式:Server 和 Client。这里的 Server 和 Client 只是 Consul 集群层面的区分,与搭建在 Cluster 之上 的应用服务无关。以 Server 模式运行的 Consul agent 节点用于维护 Consul 集群的状态,官方建议每个 Consul Cluster 至少有 3 个或以上的运行在 Server mode 的 Agent,Client 节点不限。
$ consul tls cert create -server -dc=dc1 -days=36500 ==> WARNING: Server Certificates grants authority to become a server and access all state in the cluster including root keys and all ACL tokens. Do not distribute them to production hosts that are not server nodes. Store them as securely as CA keys. ==> Using consul-agent-ca.pem and consul-agent-ca-key.pem ==> Saved dc1-server-consul-0.pem ==> Saved dc1-server-consul-0-key.pem $ consul tls cert create -server -dc=dc1 -days=36500 ==> WARNING: Server Certificates grants authority to become a server and access all state in the cluster including root keys and all ACL tokens. Do not distribute them to production hosts that are not server nodes. Store them as securely as CA keys. ==> Using consul-agent-ca.pem and consul-agent-ca-key.pem ==> Saved dc1-server-consul-1.pem ==> Saved dc1-server-consul-1-key.pem $ consul tls cert create -server -dc=dc1 -days=36500 ==> WARNING: Server Certificates grants authority to become a server and access all state in the cluster including root keys and all ACL tokens. Do not distribute them to production hosts that are not server nodes. Store them as securely as CA keys. ==> Using consul-agent-ca.pem and consul-agent-ca-key.pem ==> Saved dc1-server-consul-2.pem ==> Saved dc1-server-consul-2-key.pem
为了对Consul服务器进行身份验证,服务器会提供一种特殊的证书-包含 server.dc1.consul 在中Subject Alternative Name。如果启用verify_server_hostname,则仅允许提供此类证书的代理作为服务器引导。没有verify_server_hostname = true攻击者,可能会破坏 Consul 客户端代理,并以服务器身份重新启动该代理,以便访问您数据中心中的所有数据!这就是服务器证书很特殊的原因,只有服务器才应配置它们。
step3: 创建client角色的证书
在 Consul 1.5.2 中,您可以使用替代过程来自动将证书分发给客户端。要启用此新功能,请设置auto_encrypt。
如果您正在运行 Consul 1.5.1 或更早版本,则需要使用来为每个客户端创建单独的证书consul tls cert create -client。客户端证书也由您的 CA 签名,但是它们没有特殊性Subject Alternative Name,这意味着如果verify_server_hostname启用,则它们不能作为server角色启动。
这里我是高于1.5.2的,不需要为每个客户端创建证书,客户端只需要拥有 consul-agent-ca.pem 这个 ca 下,会自动从 server 获取证书存在内存中,并且不会持久保存。但是我测试了并没有成功,还是生成了证书
1 2 3 4 5 6 7 8
$ consul tls cert create -client -dc=dc1 -days=36500 ==> Using consul-agent-ca.pem and consul-agent-ca-key.pem ==> Saved dc1-client-consul-0.pem ==> Saved dc1-client-consul-0-key.pem $ consul tls cert create -client -dc=dc1 -days=36500 ==> Using consul-agent-ca.pem and consul-agent-ca-key.pem ==> Saved dc1-client-consul-1.pem ==> Saved dc1-client-consul-1-key.pem
step4: 创建cli的证书
1 2 3 4
$ consul tls cert create -cli -dc=dc1 -days=36500 ==> Using consul-agent-ca.pem and consul-agent-ca-key.pem ==> Saved dc1-cli-consul-0.pem ==> Saved dc1-cli-consul-0-key.pem
文件列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
$ ll total 39088 -rw-r--r-- 1 root root 39965581 Sep 13 04:30 consul_1.6.1_linux_amd64.zip -rw-r--r-- 1 root root 227 Oct 11 10:36 consul-agent-ca-key.pem -rw-r--r-- 1 root root 1249 Oct 11 10:36 consul-agent-ca.pem -rw-r--r-- 1 root root 227 Oct 11 11:47 dc1-cli-consul-0-key.pem -rw-r--r-- 1 root root 1082 Oct 11 11:47 dc1-cli-consul-0.pem -rw-r--r-- 1 root root 227 Oct 11 14:13 dc1-client-consul-0-key.pem -rw-r--r-- 1 root root 1139 Oct 11 14:13 dc1-client-consul-0.pem -rw-r--r-- 1 root root 227 Oct 11 17:35 dc1-client-consul-1-key.pem -rw-r--r-- 1 root root 1143 Oct 11 17:35 dc1-client-consul-1.pem -rw-r--r-- 1 root root 227 Oct 11 10:42 dc1-server-consul-0-key.pem -rw-r--r-- 1 root root 1139 Oct 11 10:42 dc1-server-consul-0.pem -rw-r--r-- 1 root root 227 Oct 11 10:43 dc1-server-consul-1-key.pem -rw-r--r-- 1 root root 1139 Oct 11 10:43 dc1-server-consul-1.pem -rw-r--r-- 1 root root 227 Oct 11 10:43 dc1-server-consul-2-key.pem -rw-r--r-- 1 root root 1139 Oct 11 10:43 dc1-server-consul-2.pem
server和client以及cli的配置
配置优先级按以下顺序评估:
命令行参数
环境变量
配置文件
加载配置时,Consul会以词法顺序从文件和目录中加载配置。例如,配置文件basic_config.json将在之前处理 extra_config.json 。配置可以采用 HCL 或 JSON 格式。HCL 支持在 Consul 1.0 和更高版本中可用,现在需要在所有配置文件上使用 .hcl 或 .json 扩展名以指定其格式。 consul 默认从路径 /consul/config 读取配置信息,为了规范,配置文件我路径定义为 /etc/consul.d/,数据目录定义为 /var/lib/consul/ 所有 flag 的解释可以参考 https://www.cnblogs.com/sunsky303/p/9209024.html consul 的参数可以命令行指定,也可以写 json 文件里,为了规范,命令行参数尽量少写,大体的配置信息都写 json 文件里。总体目录结构为下面,这里
$ consul members Error retrieving members: Get http://127.0.0.1:8500/v1/agent/members?segment=_all: dial tcp 127.0.0.1:8500: connect: connection refused