Centos Consul集群及Acl配置
一,准备工作
准备四台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配置文件
{
"bootstrap_expect": ,
"datacenter": "kingsun_consul",
"data_dir": "/tmp/consul",
"node_name": "kingsun_consul_server_1",
"server": true,
"client_addr": "0.0.0.0",
"ui": true,
"bind_addr": "192.168.137.100",
"acl_datacenter": "kingsun_consul",
"acl": {
"enabled": true,
"default_policy": "allow",
"enable_token_persistence": true,
"tokens": {
"master": "8dc1eb67-1f5f-4e10-ad9d-5e58b047647c"
}
}
}
服务端2配置文件
{
"datacenter": "kingsun_consul",
"data_dir": "/tmp/consul",
"node_name": "kingsun_consul_server_2",
"server": true,
"client_addr": "0.0.0.0",
"ui": true,
"bind_addr": "192.168.137.101",
"start_join":["192.168.137.100","192.168.137.101","192.168.137.102"],
"retry_join":["192.168.137.100","192.168.137.101","192.168.137.102"],
"acl_datacenter": "kingsun_consul",
"acl": {
"enabled": true,
"default_policy": "allow",
"enable_token_persistence": true,
"tokens": {
"master": "8dc1eb67-1f5f-4e10-ad9d-5e58b047647c"
}
}
}
服务端3配置文件
{
"datacenter": "kingsun_consul",
"data_dir": "/tmp/consul",
"node_name": "kingsun_consul_server_3",
"server": true,
"client_addr": "0.0.0.0",
"ui": true,
"bind_addr": "192.168.137.102",
"start_join":["192.168.137.100","192.168.137.101","192.168.137.102"],
"retry_join":["192.168.137.100","192.168.137.101","192.168.137.102"],
"acl_datacenter": "kingsun_consul",
"acl": {
"enabled": true,
"default_policy": "allow",
"enable_token_persistence": true,
"tokens": {
"master": "8dc1eb67-1f5f-4e10-ad9d-5e58b047647c"
}
}
}
客户端配置文件
{
"datacenter": "kingsun_consul",
"data_dir": "/tmp/consul",
"node_name": "kingsun_consul_client_1",
"server": false,
"client_addr": "0.0.0.0",
"ui": true,
"bind_addr": "192.168.137.103",
"start_join":["192.168.137.100","192.168.137.101","192.168.137.102"],
"retry_join":["192.168.137.100","192.168.137.101","192.168.137.102"],
"acl_datacenter": "kingsun_consul"
}
启动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"值
"acl": {
"enabled": true,
"default_policy": "deny",
"enable_token_persistence": true,
"tokens": {
"master": "8dc1eb67-1f5f-4e10-ad9d-5e58b047647c",
"agent":"920dfd67-88c1-f82c-ef34-c1d39d72bee0"
}
修改客户端配置文件,新增acl配置
"acl":{
"tokens":{
"agent":"920dfd67-88c1-f82c-ef34-c1d39d72bee0"
}
}
重新启动consul,加载新的配置文件。
四,添加服务注册token
没配置ACL之前默认策略为allow,可以任意进行服务注册,配置acl后,可以添加一个用于服务注册的token,某个服务要注册到consul,必须带上这个token。
先添加一个策略,可以用api也可以用ui界面

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

查看token值

四,服务注册
添加一个用于健康检查的Api
[Route("api/[controller]")]
[ApiController]
public class HealthController : ControllerBase
{
[HttpGet]
public IActionResult Get() => Ok("ok");
}
新建一个asp.net core程序,添加consul nuget包,修改appsetting.json
{
"Service": {
"Name": "KingSun.SensorService",//注册到consul时所用服务名
"Port": ""//该服务访问端口
},
"Consul": {
"IP": "192.168.137.103",//consul client地址
"Port": "",//consul 端口
"Token": "ca5c9d3b-9ba7-36e5-d2af-3a6f5cd2f09c" //所用token
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
添加一个扩写类对 IApplicationBuilder进行扩写
public class ServiceEntity
{
public string IP { get; set; }
public int Port { get; set; }
public string ServiceName { get; set; }
public string ConsulIP { get; set; }
public int ConsulPort { get; set; }
public string Token { get;set; }
}
public static class ConsulExtensions
{
public static IApplicationBuilder RegisterConsul(this IApplicationBuilder app, IApplicationLifetime lifetime, ServiceEntity serviceEntity)
{
using (var consulClient = new ConsulClient((x) => {
x.Address = new Uri($"http://{serviceEntity.ConsulIP}:{serviceEntity.ConsulPort}");
x.Token = serviceEntity.Token;
}
))
{
var httpCheck = new AgentServiceCheck()
{
DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(),//服务启动多久后注册
Interval = TimeSpan.FromSeconds(),//健康检查时间间隔,或者称为心跳间隔
HTTP = $"http://{serviceEntity.IP}:{serviceEntity.Port}/api/health",//健康检查地址
Timeout = TimeSpan.FromSeconds()
};
// Register service with consul
var registration = new AgentServiceRegistration()
{
Checks = new[] { httpCheck },
ID = Guid.NewGuid().ToString(),
Name = serviceEntity.ServiceName,
Address = serviceEntity.IP,
Port = serviceEntity.Port,
Tags = new[] { $"urlprefix-/{serviceEntity.ServiceName}" },
};
consulClient.Agent.ServiceRegister(registration).Wait();
lifetime.ApplicationStopping.Register(() =>
{
consulClient.Agent.ServiceDeregister(registration.ID).Wait();//服务停止时取消注册
});
return app; };
}
}
在startup.Configure中进行服务注册
ServiceEntity serviceEntity = new ServiceEntity
{
IP = "192.168.1.142",
Port = Convert.ToInt32(Configuration["Service:Port"]),
ServiceName = Configuration["Service:Name"],
ConsulIP = Configuration["Consul:IP"],
ConsulPort = Convert.ToInt32(Configuration["Consul:Port"]),
Token = Configuration["Consul:Token"]
};
app.RegisterConsul(lifetime, serviceEntity);
启动项目,指定urls:dotnet KingSun.SensorService.Web.dll --urls="http://192.168.1.142:5001"
打开consul管理界面看到服务已经注册上

Centos Consul集群及Acl配置的更多相关文章
- 运维小姐姐说这篇Consul集群和ACL配置超给力(保姆级)
前言 上一篇简单介绍了Consul,并使用开发模式(dev)进行流程演示,但在实际开发中需要考虑Consul的高可用和操作安全性,所以接着来聊聊集群和ACL的相关配置,涉及到的命令会在环境搭建过程中详 ...
- linux(centos8):安装配置consul集群(consul 1.8.4 | centos 8.2.2004)
一,什么是consul? 1,Consul 是 HashiCorp 公司推出的开源软件,用于实现分布式系统的服务发现与配置. Consul 是分布式的.高可用的. 可横向扩展的 2,官方网站: h ...
- consul集群搭建以及ACL配置
由于时间匆忙,要是有什么地方没有写对的,请大佬指正,谢谢.文章有点水,大佬勿喷这篇博客不回去深度的讲解consul中的一些知识,主要分享的我在使用的时候的一些操作和遇见的问题以及解决办法.当然有些东西 ...
- 分布式架构学习-Consul集群配置
简介 之前公司用的是Consul进行服务发现以及服务管理,自己一直以来只是用一下,但是没有具体的深入,觉得学习不可以这样,所以稍微研究了一下. 网上有很多关于Consul的介绍和对比,我这里也不献丑了 ...
- Consul集群搭建 2Server+ 3Client
环境说明: 192.168.202.177 consul-server01 192.168.202.177 consul-server02192.168.202.174 mysql server no ...
- Docker应用系列(三)| 构建Consul集群
本示例基于Centos 7,在阿里云的三台机器上部署consul集群,假设目前使用的账号为release,拥有sudo权限. 由于Docker官方镜像下载较慢,可以开启阿里云的Docker镜像下载加速 ...
- kubernetes实战之部署一个接近生产环境的consul集群
系列目录 前面我们介绍了如何在windows单机以及如何基于docker部署consul集群,看起来也不是很复杂,然而如果想要把consul部署到kubernetes集群中并充分利用kubernete ...
- Ocelot+Consul 集群搭建实践
博客园已经有很多大神写过consul集群搭建了.大家都在玩,那我也不能托后退呢 不过自己研究下还是好的.毕竟每个人遇到的问题的不同 研究过才能说自己玩过consul,文章有部分名词解释是收集网络 Co ...
- 基于Docker的Consul集群实现服务发现
服务发现 其实简单说,服务发现就是解耦服务与IP地址之间的硬绑定关系,以典型的集群为例,对于集群来说,是有多个节点的,这些节点对应多个IP(或者同一个IP的不同端口号),集群中不同节点责任是不一样的. ...
随机推荐
- rsync实时同步
假设有如下需求: 假设两个服务器: 192.168.0.1 源服务器 有目录 /opt/test/ 192.168.0.2 目标服务器 有目录 /opt/bak/test/ 实现的目的就是保持这两 ...
- #C++初学记录(typedef和define)
typedef的用法 typedef关键字可以用于给数据类型定义一个别名,即可以给long long 定义成ll,也可以给结构体定义,当你定义了一个结构体时,每次创建一个结构体都要使用struct+结 ...
- Service Function Chaining Resource Allocation: A Survey
摘要: 服务功能链(SFC)是未来Internet的一项关键技术. 它旨在克服当前部署模型的僵化和静态限制. 该技术的应用依赖于可以将SFC最佳映射到衬底网络的算法. 这类算法称为"服务功能 ...
- jar第三方组件Dependency-check依赖检查工具
jar第三方组件Dependency-check依赖检查工具 http://www.mianhuage.com/913.html 工具下载 http://dl.bintray.com/jeremy-l ...
- nginx-rtmp
最近使用ffmpeg推流为rtmp,进行直播.记录一下nginx-rtmp的配置.因为我们要添加ngin-rtmp模块,所以不能直接apt安装. 下载niginx和nginx-rtmp-module的 ...
- Win10 高频率使用的快捷组合键
Win10 系统有很多的快捷组合键,学会使用这些快捷组合键可以节省一点时间 0x01 Win+D 显示或最小化桌面在键盘上按下Win+D可以切换显示桌面或最小化桌面所有内容: 0x02 Ctrl+Sh ...
- 学习使用junit4
目录 一.junit介绍 二.junit4的简单使用
- Laravel 数据库实例教程 —— 使用查询构建器对数据库进行增删改查
原文地址:https://blog.csdn.net/lmy_love_/article/details/72832259 获取查询构建器很简单,还是要依赖DB门面,我们使用DB门面的table方法, ...
- Github首次使用教程(本地新建项目并同步到Github远程仓库)
网上关于Github的教程很多且有点乱,自己亲自躺坑实践,现分享出来给将要入坑的小伙伴. 主要步骤: 创建Github帐号,登录,新建仓库(远程仓库) 下载安装Git,git bash配置及简单使用( ...
- SpringBoot常用注解(三)
最全的Java常用开发注解 转 https://blog.csdn.net/weixin_40753536/article/details/81285046 Spring ...