通过前三篇文章,成功启动了consul,注册了服务,那么问题来了,谁都可以注册还怎么玩,必须要有一个安全的机制。
简单的玩法就是acl加一个toekn,那怎么加了?
第一步: 启动配置命令
-config-dir :配置文件的文件夹,将读取里面所有的*.json 格式数据,文件名必须是.json结尾哦。
consul agent -bootstrap-expect 1 -server -data-dir D:\HNHPC\微服务框架\consul_1.5.3_windows_amd64\consul -node=192.168.1.161 -bind=192.168.1.161 -enable-script-checks=true -datacenter=hnhpc -client=0.0.0.0 -ui -config-dir D:\HNHPC\微服务框架\consul_1.5.3_windows_amd64\config

第二步:在ConsulManager类中,填写 master的 值【245d0a09-7139-bbea-aadc-ff170a0562b1】
第三步:启动core系统就通过toekn注册了,没有token的就限制了注册。
using Consul;
using System;
using System.Collections.Generic;
using System.Text;
namespace Core.Consul
{
internal class ConsulManager
{
private static ConsulClient client = null;
static ConsulManager()
{
if (client == null)
{
var address = ServiceManagerSection.Instance.Address;
ConsulClientConfiguration config = new ConsulClientConfiguration()
{
Address = new Uri(address),
Token = "245d0a09-7139-bbea-aadc-ff170a0562b1"
};
client = new ConsulClient(config);
}
}
private ConsulManager()
{
}
/// <summary>
/// 注册服务
/// </summary>
public static void Register(string name, string address, int port, string checkHttpAddress = "")
{
var service = new AgentServiceRegistration();
service.Name = name;
service.Address = address;
service.Port = port;
service.ID = address + ":" + port;
AgentServiceCheck checkHttp = new AgentServiceCheck();
if (string.IsNullOrEmpty(checkHttpAddress))
{
if (port == 80)
{
checkHttpAddress = string.Format("http://{0}/default/test", address);
}
else
{
checkHttpAddress = string.Format("http://{0}:{1}/default/test", address, port);
}
}
checkHttp.HTTP = checkHttpAddress;
checkHttp.Interval = new TimeSpan(0, 0, 10);
checkHttp.DeregisterCriticalServiceAfter = new TimeSpan(0, 0, 120);
service.Checks = new List<AgentServiceCheck>() { checkHttp }.ToArray();
var result = client.Agent.ServiceRegister(service).Result;
if (result.StatusCode != System.Net.HttpStatusCode.OK)
{
throw new Exception($@"注册{address}-{name}服务失败");
}
}
public static void Remove(string address, int port)
{
string id = address + ":" + port;
client.Agent.ServiceDeregister(id);
}
public static Dictionary<string, AgentService> FindAll()
{
var result = client.Agent.Services().Result.Response;
return result;
}
}
}
{
"acl" : {
"enabled" : true,
"default_policy" : "deny",
"down_policy" : "extend-cache",
"tokens" :{
"master": "245d0a09-7139-bbea-aadc-ff170a0562b1"
}
}
}
其实还有更多的玩法,大家可以启动之后一个一个的设置来玩玩
不懂可以扫二维码交流

