背景:我的服务结构是 第一层是nginx,第二层是ocelot网关,第三层是应用服务。网关ocelot启用服务发现(consul)。第三层的应用服务其中一个是identityserver4认证服务。正常使用都没有任何问题。
在单点登录的时候遇到了一个问题,如果采用上述的架构,在web端单点登录的时候会请求到id4的认证页面,id4的地址内网IP,经过一系列转发,web端会重定向到id4的地址,这个时候在外网一定打不开。于是我采用的方式是nginx直接解析到id4的服务,而不经过ocelot网关,问题结局。但是对配置的一致性,高可用都有影响。即id4的服务只有需要验证的服务和token请求的服务才可以通过ocelot使用,对于单点登录这种方式就无法使用(无法使用的原因是我采用id4自带的单点登录方式,至于自己手动写应该可以解决)这时就遇到了一个问题,nginx端的配置是纯手工的。想到这里,后期需要把ocelot的配置交给 consul-template,那干脆一起来,ocelot ,id4其他的服务需要由nginx部署的都一起也是可以
1. apt install consul (在nginx机器下安装consul客户端,我的 consul服务端都放入docker 中了,至于这个不放如docker 中的原因:1没必要,一台服务器一个consul是标准的推荐部署方案,因为很多服务我采用部署到docker中。所以我采用docker中创建一批 client来维护心跳。2我不会,因为必然要数据卷要映射到本机上,找不到文档解决不了。)
2.运行consul
nohup consul agent -server -bootstrap-expect=3 -ui -node=server_tengxun_linux -client='0.0.0.0' -data-dir=/home/mysite/consul/data/ -config-dir=/home/mysite/consul/conf -dc=tengxun -bind=172.20.0.1 &
(注意 采用 nohup .... & 方式后台运行)
3.创建运行脚本 consul.sh,脚本内容
#!/bin/sh
nohup ./consul agent -server -bootstrap-expect=3 -ui -node=server_tengxun_linux -client='0.0.0.0' -data-dir=/home/mysite/consul/data/ -config-dir=/home/mysite/consul/conf -datacenter=tengxun -bind=172.17.0.1 &
echo -e "consul后台启动成功,绑定本地-ip 127.0.0.1 加入集群 172.17.0.1"
consul-template
1.到githup或者官网中找到consul-template的发行版
2.上传到linux 服务器,并且设置好环境变量(主要是方便)
3.编写好配置文件和模板,使用nuhup后台运行即可
4.模板输出路径配置到nginx,command执行重启nginx 服务
5.最后只要 consul 服务有变动就会自动创建一遍模板,执行重启nginx服务,不需要手动操作
配置文件和模板使用方式githup上有
网友评论