Consul-搭建
1、Consul的整体架构,主要有service和client通过Raft算法保证服务的一致性,且支持健康检查。
\
2、Raft算法。
Consul是由HashiCorp基于Go语言开发的支持多数据中心分布式高可用的服务发布和注册服务软件,采用Raft是提供一致性的算法。它依赖于CAP定理的原理,该定理指出,在存在网络分区的情况下,必须在一致性和可用性之间进行选择。并非CAP定理的所有三个基本原理:Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性),都可以在任何给定的时间点实现。人们必须在最好的情况下权衡其中任何两个。 一个Raft集群包含多个服务器,通常是奇数的。例如,如果我们有五台服务器,它将允许系统容忍两个故障。在任何给定时间,每个服务器都处于以下三种状态之一:Leader,Follower或Candidate。在正常操作中,只有一个领导者,所有其他服务器都是Follower。这些Follower处于被动状态,即他们自己不发出请求,而只是响应Leader和Candidate的请求。
3、Consul 搭建。
consul 集群的三个节点部署方式使用 StatefulSet
consul集群成员之间使用TLS进行安全通信 TLS and encryption keys
4、下载git clone https://github.com/nicklv/consul_cluster_on_kubernetes.git
Consul集群中成员之间的RPC通信使用TLS进行加密。通过以下命令初始化CA证书:
cfssl gencert -initca ca/ca-csr.json | cfssljson -bare ca cfssl gencert \ -ca=ca.pem \ -ca-key=ca-key.pem \ -config=ca/ca-config.json \ -profile=default \ ca/consul-csr.json | cfssljson -bare consul -- 生产文件 ca-key.pem ca.pem consul-key.pem consul.pem 生成 Consul Gossip 加密密钥 GOSSIP_ENCRYPTION_KEY=$(consul keygen) 使用以下命令生成Consul 集群使用的Secret 和 使用以下命令生成Consul 集群使用的Secret 和 Configmap kubectl create secret generic consul \ --from-literal="gossip-encryption-key=${GOSSIP_ENCRYPTION_KEY}" \ --from-file=ca.pem \ --from-file=consul.pem \ --from-file=consul-key.pem kubectl create configmap consul --from-file=configs/server.json
5、创建pv
在创建Consul service和statefulSet之前,先创建Consul集群使用到的pv(persistVolume)持久化存储卷和pvc(persistVolumeClaim)持久化存储卷声明
kubectl create -f pvc/pvc.yaml
6、创建 Consul 集群 StatefulSe
kubectl create -f statefulsets/consul.yaml
7、测试
kubectl get pods [root@LAPP-V999 ~]# kubectl get pods |grep consul consul-0 1/1 Running 5 43d consul-1 1/1 Running 3 43d consul-2 1/1 Running 0 41d consul-client-0 1/1 Running 5 43d consul-client-1 1/1 Running 4 43d consul-client-2 1/1 Running 0 41d [root@LAPP-V999 ~]# [root@LAPP-V999 ~]# kubectl get pods |grep consul consul-0 1/1 Running 5 43d consul-1 1/1 Running 3 43d consul-2 1/1 Running 0 41d consul-client-0 1/1 Running 5 43d consul-client-1 1/1 Running 4 43d consul-client-2 1/1 Running 0 41d [root@LAPP-V999 ~]# kubectl exec -it consul-0 /bin/sh / # consul members Node Address Status Type Build Protocol DC Segment consul-0 10.244.1.16:8301 alive server 1.1.0 2 dc1 <all> consul-1 10.244.0.26:8301 alive server 1.1.0 2 dc1 <all> consul-2 10.244.2.234:8301 alive server 1.1.0 2 dc1 <all> consul-client-0 10.244.1.17:8301 alive client 1.1.0 2 dc1 <default> consul-client-1 10.244.0.29:8301 alive client 1.1.0 2 dc1 <default> consul-client-2 10.244.2.236:8301 alive client 1.1.0 2 dc1 <default> / #
8、通过Ingress暴露外网访问,我们配置了一个consul.xxxx.cn的域名,暴露到了外网。这种模式,外网可以无限制进行consul集群web管理界面访问,所以建议在开发或者测试环境使用,不要在生产环境使用该模式。