docker服务confd安装配置学习教程

昝辉Zac Zac的SEO博客,坚持12年,优化成为生活。

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.

confd:confd通过读取配置(支持etcd,consul,环境变量),通过go的模板,生成最终的配置文件.

安装:安装和etcd一样,非常方便,已经提供了64位的可执行程序,下载下来之后直接放到PATH中(/usr/local/bin)即可(别忘了+x).

haproxy配置生成:

confd配置文件默认在/etc/confd中,可以通过参数-confdir指定,目录中包含两个子目录,分别是:conf.d templates.

confd会先读取conf.d目录中的配置文件(toml格式),然后根据文件指定的模板路径去渲染模板,基于之前配置的etcd集群,读取/services/web中的目录和key,结构为:

  1. /services/web/$DOMAIN/$HOST/ip
  2. |-port

其中DOMAIN表示注册应用的域名,HOST表示注册机器的主机名,首先创建confd配置文件,代码如下:

  1. [template]
  2. src="haproxy.cfg.tmpl"
  3. dest="/home/babydragon/haproxy/haproxy.cfg"
  4. keys=[
  5. "/services/web",
  6. ]
  7. #reload_cmd="/etc/init.d/haproxyreload"

现在只测试模板生成,所以不关注检查、重启等命令,配置模板名称、目标路径和获取的key即可,着重看下模板变动部分,前面就是写死的一些haproxy的标准配置,如日志等,代码如下:

  1. frontendwebin
  2. bind:80
  3. {{$domains:=lsdir"/services/web"}}
  4. {{range$domain:=$domains}}
  5. aclis_{{$domain}}hdr(host)-i{{$domain}}
  6. {{end}}
  7. {{range$domain:=$domains}}
  8. use_backend{{$domain}}_clusterifis_{{$domain}}
  9. {{end}}
  10. {{range$domain:=$domains}}
  11. backend{{$domain}}_cluster
  12. cookieSERVERIDinsertindirectnocache
  13. {{$domain_dir:=printf"/services/web/%s"$domain}}{{range$host:=lsdir$domain_dir}}
  14. server{{base$host}}{{$ip_key:=printf"/services/web/%s/%s/ip"$domain$host}}{{getv$ip_key}}:{{$port_key:=printf"/services/web/%s/%s/port"$domain$host}}{{getv$port_key}}cookie{{base$host}}check
  15. {{end}}
  16. {{end}}

这里主要有两个循环,第一个循环所有的域名,第一个循环每一个域名下的所有主机,haproxy需要通过设置acl的方式来进行按照域名做负载均衡,因此首先循环域名,为每个域名创建一个acl规则和一个规则的使用.

下面再通过一个循环,创建没个域名对应的后段,confd模板详细文档可以参考github上的文档,大致的意思是通过lsdir获取当前目录下的所有子目录,第一层子目录为域名,根据域名即可生成acl规则、规则使用、后端名称等数据.

再重新通过瓶装域名目录,对域名目录执行lsdir,读取目录下的每个主机名,创建后端的server条目,一个域名下的负载均衡后段服务器,同时获取挂在这个目录下的属性键值对(这里只有ip和port),创建完模板和配置之后,先构造一些测试数据,代码如下:

  1. etcdctlmkdir/services/web
  2. etcdctlmkdir/services/web/a.abc.com
  3. etcdctlmkdir/services/web/b.abc.com
  4. etcdctlmkdir/services/web/a.abc.com/server1
  5. etcdctlmkdir/services/web/a.abc.com/server2
  6. etcdctlmkdir/services/web/b.abc.com/server1
  7. etcdctlset/services/web/a.abc.com/server1/ip10.0.0.1
  8. etcdctlset/services/web/a.abc.com/server1/port10000
  9. etcdctlset/services/web/a.abc.com/server2/port10001
  10. etcdctlset/services/web/a.abc.com/server2/ip10.0.0.1
  11. etcdctlset/services/web/b.abc.com/server1/ip10.0.0.2
  12. etcdctlset/services/web/b.abc.com/server1/port12345

这里模拟三个容器,其中两个作为域名a.abc.com运行容器,一个作为b.abc.com容器,然后执行confd,检查生成的配置文件,代码如下:

confd -confdir ./confd -onetime -backend etcd -node 127.0.0.1:4001

刚才那段模板渲染后为如下代码:

  1. frontendwebin
  2. bind:80
  3. aclis_a.abc.comhdr(host)-ia.abc.com
  4. aclis_b.abc.comhdr(host)-ib.abc.com
  5. use_backenda.abc.com_clusterifis_a.abc.com
  6. use_backendb.abc.com_clusterifis_b.abc.com
  7. backenda.abc.com_cluster
  8. cookieSERVERIDinsertindirectnocache
  9. serverserver110.0.0.1:10000cookieserver1check
  10. serverserver210.0.0.1:10001cookieserver2check
  11. //phpfensi.com
  12. backendb.abc.com_cluster
  13. cookieSERVERIDinsertindirectnocache
  14. serverserver110.0.0.2:12345cookieserver1check
  15. NoComments

相关广告
  • docker服务confd安装配置学习教程 docker服务confd安装配置学习教程 docker服务confd安装配置学习教程
相关阅读

docker服务confd安装配置学习教程

2019/10/10 17:44:51 | 谷歌SEO算法 | DNS