一,准备工作

准备四台centos服务器,三台用于consul server 高可用集群,一台用于consul client作服务注册及健康检查。架构如下图所示

二,在四台服务器上安装consul

1,安装unzip 工具:yum install -y zip unzip

2,查看centos版本。uname -m,从https://www.consul.io/downloads.html获取下载地址

3,下载consul:wget https://releases.hashicorp.com/consul/1.6.2/consul_1.6.2_freebsd_amd64.zip

4,解压 :unzip consul_1.6.2_freebsd_amd64.zip

5,移动解压出来的文件到/etc/usr/bin:mv consul /etc/usr/bin

6,运行consul指令验证安装是否成功

三,配置consul

在四台服务器上分别在/tmp目录创建名为consul_config.json的文件,内容如下

服务端1配置文件

  1. {
  2. "bootstrap_expect": ,
  3. "datacenter": "kingsun_consul",
  4. "data_dir": "/tmp/consul",
  5. "node_name": "kingsun_consul_server_1",
  6. "server": true,
  7. "client_addr": "0.0.0.0",
  8. "ui": true,
  9. "bind_addr": "192.168.137.100",
  10. "acl_datacenter": "kingsun_consul",
  11. "acl": {
  12. "enabled": true,
  13. "default_policy": "allow",
  14. "enable_token_persistence": true,
  15. "tokens": {
  16. "master": "8dc1eb67-1f5f-4e10-ad9d-5e58b047647c"
  17. }
  18. }
  19. }

服务端2配置文件

  1. {
  2. "datacenter": "kingsun_consul",
  3. "data_dir": "/tmp/consul",
  4. "node_name": "kingsun_consul_server_2",
  5. "server": true,
  6. "client_addr": "0.0.0.0",
  7. "ui": true,
  8. "bind_addr": "192.168.137.101",
  9. "start_join":["192.168.137.100","192.168.137.101","192.168.137.102"],
  10. "retry_join":["192.168.137.100","192.168.137.101","192.168.137.102"],
  11. "acl_datacenter": "kingsun_consul",
  12. "acl": {
  13. "enabled": true,
  14. "default_policy": "allow",
  15. "enable_token_persistence": true,
  16. "tokens": {
  17. "master": "8dc1eb67-1f5f-4e10-ad9d-5e58b047647c"
  18. }
  19. }
  20. }

服务端3配置文件

  1. {
  2. "datacenter": "kingsun_consul",
  3. "data_dir": "/tmp/consul",
  4. "node_name": "kingsun_consul_server_3",
  5. "server": true,
  6. "client_addr": "0.0.0.0",
  7. "ui": true,
  8. "bind_addr": "192.168.137.102",
  9. "start_join":["192.168.137.100","192.168.137.101","192.168.137.102"],
  10. "retry_join":["192.168.137.100","192.168.137.101","192.168.137.102"],
  11. "acl_datacenter": "kingsun_consul",
  12. "acl": {
  13. "enabled": true,
  14. "default_policy": "allow",
  15. "enable_token_persistence": true,
  16. "tokens": {
  17. "master": "8dc1eb67-1f5f-4e10-ad9d-5e58b047647c"
  18. }
  19. }
  20. }

客户端配置文件

  1. {
  2. "datacenter": "kingsun_consul",
  3. "data_dir": "/tmp/consul",
  4. "node_name": "kingsun_consul_client_1",
  5. "server": false,
  6. "client_addr": "0.0.0.0",
  7. "ui": true,
  8. "bind_addr": "192.168.137.103",
  9. "start_join":["192.168.137.100","192.168.137.101","192.168.137.102"],
  10. "retry_join":["192.168.137.100","192.168.137.101","192.168.137.102"],
  11. "acl_datacenter": "kingsun_consul"
  12. }

启动consul:在四服务器分别运行指令:consul agent -config-file /tmp/consul.config.json

可以看到已经有4个节点。

四,配置acl

1,创建一个agent token

先创建一个policy,可以用api也可以用ui界面

用这个policy创建一个token

查看token值 ,可以用api也可以用ui界面

修改服务配置文件,将"default_policy"值改为"deny","tokens"节点新增"agent"值

  1. "acl": {
  2. "enabled": true,
  3. "default_policy": "deny",
  4. "enable_token_persistence": true,
  5. "tokens": {
  6. "master": "8dc1eb67-1f5f-4e10-ad9d-5e58b047647c",
  7. "agent":"920dfd67-88c1-f82c-ef34-c1d39d72bee0"
  8. }

修改客户端配置文件,新增acl配置

  1. "acl":{
  2. "tokens":{
  3. "agent":"920dfd67-88c1-f82c-ef34-c1d39d72bee0"
  4. }
  5. }

重新启动consul,加载新的配置文件。

四,添加服务注册token

没配置ACL之前默认策略为allow,可以任意进行服务注册,配置acl后,可以添加一个用于服务注册的token,某个服务要注册到consul,必须带上这个token。

先添加一个策略,可以用api也可以用ui界面

再用这个策略创建一个token,可以用api也可以用ui界面

查看token值

四,服务注册

添加一个用于健康检查的Api

  1. [Route("api/[controller]")]
  2. [ApiController]
  3. public class HealthController : ControllerBase
  4. {
  5. [HttpGet]
  6. public IActionResult Get() => Ok("ok");
  7. }

新建一个asp.net core程序,添加consul nuget包,修改appsetting.json

  1. {
  2. "Service": {
  3. "Name": "KingSun.SensorService",//注册到consul时所用服务名
  4. "Port": ""//该服务访问端口
  5. },
  6. "Consul": {
  7. "IP": "192.168.137.103",//consul client地址
  8. "Port": "",//consul 端口
  9. "Token": "ca5c9d3b-9ba7-36e5-d2af-3a6f5cd2f09c" //所用token
  10. },
  11. "Logging": {
  12. "LogLevel": {
  13. "Default": "Warning"
  14. }
  15. },
  16. "AllowedHosts": "*"
  17. }

添加一个扩写类对 IApplicationBuilder进行扩写

  1. public class ServiceEntity
  2. {
  3. public string IP { get; set; }
  4. public int Port { get; set; }
  5. public string ServiceName { get; set; }
  6. public string ConsulIP { get; set; }
  7. public int ConsulPort { get; set; }
  8. public string Token { get;set; }
  9. }
  10. public static class ConsulExtensions
  11. {
  12. public static IApplicationBuilder RegisterConsul(this IApplicationBuilder app, IApplicationLifetime lifetime, ServiceEntity serviceEntity)
  13. {
  14. using (var consulClient = new ConsulClient((x) => {
  15. x.Address = new Uri($"http://{serviceEntity.ConsulIP}:{serviceEntity.ConsulPort}");
  16. x.Token = serviceEntity.Token;
  17. }
  18. ))
  19. {
  20. var httpCheck = new AgentServiceCheck()
  21. {
  22. DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(),//服务启动多久后注册
  23. Interval = TimeSpan.FromSeconds(),//健康检查时间间隔,或者称为心跳间隔
  24. HTTP = $"http://{serviceEntity.IP}:{serviceEntity.Port}/api/health",//健康检查地址
  25. Timeout = TimeSpan.FromSeconds()
  26. };
  27. // Register service with consul
  28. var registration = new AgentServiceRegistration()
  29. {
  30. Checks = new[] { httpCheck },
  31. ID = Guid.NewGuid().ToString(),
  32. Name = serviceEntity.ServiceName,
  33. Address = serviceEntity.IP,
  34. Port = serviceEntity.Port,
  35. Tags = new[] { $"urlprefix-/{serviceEntity.ServiceName}" },
  36. };
  37. consulClient.Agent.ServiceRegister(registration).Wait();
  38. lifetime.ApplicationStopping.Register(() =>
  39. {
  40. consulClient.Agent.ServiceDeregister(registration.ID).Wait();//服务停止时取消注册
  41. });
  42. return app;
  43.  
  44. };
  45. }
  46. }

在startup.Configure中进行服务注册

  1. ServiceEntity serviceEntity = new ServiceEntity
  2. {
  3. IP = "192.168.1.142",
  4. Port = Convert.ToInt32(Configuration["Service:Port"]),
  5. ServiceName = Configuration["Service:Name"],
  6. ConsulIP = Configuration["Consul:IP"],
  7. ConsulPort = Convert.ToInt32(Configuration["Consul:Port"]),
  8. Token = Configuration["Consul:Token"]
  9. };
  10. app.RegisterConsul(lifetime, serviceEntity);

启动项目,指定urls:dotnet KingSun.SensorService.Web.dll --urls="http://192.168.1.142:5001"

打开consul管理界面看到服务已经注册上

Centos Consul集群及Acl配置的更多相关文章

  1. 运维小姐姐说这篇Consul集群和ACL配置超给力(保姆级)

    前言 上一篇简单介绍了Consul,并使用开发模式(dev)进行流程演示,但在实际开发中需要考虑Consul的高可用和操作安全性,所以接着来聊聊集群和ACL的相关配置,涉及到的命令会在环境搭建过程中详 ...

  2. linux(centos8):安装配置consul集群(consul 1.8.4 | centos 8.2.2004)

    一,什么是consul? 1,Consul 是 HashiCorp 公司推出的开源软件,用于实现分布式系统的服务发现与配置. Consul 是分布式的.高可用的. 可横向扩展的   2,官方网站: h ...

  3. consul集群搭建以及ACL配置

    由于时间匆忙,要是有什么地方没有写对的,请大佬指正,谢谢.文章有点水,大佬勿喷这篇博客不回去深度的讲解consul中的一些知识,主要分享的我在使用的时候的一些操作和遇见的问题以及解决办法.当然有些东西 ...

  4. 分布式架构学习-Consul集群配置

    简介 之前公司用的是Consul进行服务发现以及服务管理,自己一直以来只是用一下,但是没有具体的深入,觉得学习不可以这样,所以稍微研究了一下. 网上有很多关于Consul的介绍和对比,我这里也不献丑了 ...

  5. Consul集群搭建 2Server+ 3Client

    环境说明: 192.168.202.177 consul-server01 192.168.202.177 consul-server02192.168.202.174 mysql server no ...

  6. Docker应用系列(三)| 构建Consul集群

    本示例基于Centos 7,在阿里云的三台机器上部署consul集群,假设目前使用的账号为release,拥有sudo权限. 由于Docker官方镜像下载较慢,可以开启阿里云的Docker镜像下载加速 ...

  7. kubernetes实战之部署一个接近生产环境的consul集群

    系列目录 前面我们介绍了如何在windows单机以及如何基于docker部署consul集群,看起来也不是很复杂,然而如果想要把consul部署到kubernetes集群中并充分利用kubernete ...

  8. Ocelot+Consul 集群搭建实践

    博客园已经有很多大神写过consul集群搭建了.大家都在玩,那我也不能托后退呢 不过自己研究下还是好的.毕竟每个人遇到的问题的不同 研究过才能说自己玩过consul,文章有部分名词解释是收集网络 Co ...

  9. 基于Docker的Consul集群实现服务发现

    服务发现 其实简单说,服务发现就是解耦服务与IP地址之间的硬绑定关系,以典型的集群为例,对于集群来说,是有多个节点的,这些节点对应多个IP(或者同一个IP的不同端口号),集群中不同节点责任是不一样的. ...

随机推荐

  1. bluestart

    # Add nano as default editorexport EDITOR=nanoexport PULSE_LATENCY_MSEC=60 alias ls='ls --color=auto ...

  2. ICEM-带柱底座

    原视频下载地址:https://pan.baidu.com/s/1c2KgCBA 密码: ixk8

  3. ·分布式文件系统HDFS 练习

    作业要求来源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3292 1.目录操作 在HDFS中为hadoop用户创建一个用户目录( ...

  4. 第06组 Alpha冲刺(1/4)

    队名:福大帮 组长博客链接:https://www.cnblogs.com/mhq-mhq/p/11863075.html 作业博客 :https://edu.cnblogs.com/campus/f ...

  5. Python3基础 sys.path 查看与修改导包的路径

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  6. matlab学习笔记10_3关系运算符和逻辑运算符

    一起来学matlab-matlab学习笔记10 10_3关系运算符和逻辑运算符 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰 ...

  7. 快排的时间复杂度O(n) = nlogn计算过程

    转载:https://www.cnblogs.com/javawebsoa/p/3194015.html 本文以快速排序为例,推导了快排的时间复杂度nlogn是如何得来的,其它算法与其类似. 对数据D ...

  8. [LeetCode] 342. Power of Four 4的次方数

    Given an integer (signed 32 bits), write a function to check whether it is a power of 4. Example:Giv ...

  9. rabbitmq设置消息优先级、队列优先级配置

    1.首先在consume之前声明队列的时候,要加上x-max-priority属性,一般为0-255,大于255出错  -----配置队列优先级 配置成功后rabbitmq显示: 2.在向exchan ...

  10. fiddler 捕捉不到代码发出去的HTTP请求

    检查代码里是不是把代理设置为空了,null. 或是通过.config文件禁用了代理.