第四篇,新手注册Consul 服务带token

时间:2019-12-06
本文章向大家介绍第四篇,新手注册Consul 服务带token,主要包括第四篇,新手注册Consul 服务带token使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

通过前三篇文章,成功启动了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"
    }
  }
}

其实还有更多的玩法,大家可以启动之后一个一个的设置来玩玩

原文地址:https://www.cnblogs.com/iversonlzy/p/11994445.html