Chinaunix首页 | 论坛 | 博客
  • 博客访问: 342711
  • 博文数量: 52
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 577
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-27 14:21
个人简介

知道自己该干嘛,知道自己能干嘛

文章分类

全部博文(52)

文章存档

2019年(1)

2018年(8)

2017年(2)

2016年(11)

2015年(3)

2014年(10)

2013年(17)

我的朋友

分类: 系统运维

2016-06-28 14:42:36


                     Halo,  今天我们来学习一下 interlock,interlock 用于 docker deamon 和 docker swarm 集群的服务发现。
          我们的需求是什么? 当我的容器启动一个服务时,能被自动发现,前端的反向代理可以自动更改配置文件,添加和删除服务。
                     interlock 能做什么? 引用github 开发者的原话 :
       Dynamic, event-driven extension system using . Extensions include HAProxy and Nginx for dynamic load balancing.
                     
                     整理下今天我们的需求 :
                                (1) 启动容器,提供一个服务,前端代理的nginx自动更新配置文件
                                (2) 更新interlock nginx 配置模板,添加 gzip相关配置,默认模板内 gzip 配置是未开启的
                                (3) 测试是否可以提供服务,关闭一个容器,前端代理配置文件是否更新,服务自动缩减

                    step 1 拉取一个稳定的 interlock 容器
                               docker pull ehazlett/interlock:master
                               docker pull nginx
                     
                    setp 2 编写一个interlock 配置文件
                               [root@VM_1_11_centos nginx]# cat config.toml 
                                ListenAddr = ":8080"
                                DockerURL = "unix:///var/run/docker.sock"  // 如果是swarm 集群集群,就是监听swarm manager:4000端口

                               [[Extensions]]
                                Name = "nginx"
                                ConfigPath = "/etc/nginx/nginx.conf"
                                PidPath = "/var/run/nginx.pid"
                                TemplatePath = "/etc/interlock/nginx.conf.template"
                                BackendOverrideAddress = "172.17.0.1"   // 如果是 swarm 集群,此设置可以不写
                                MaxConn = 1024
                                Port = 80
                                NginxPlusEnabled = false

                               生成一个模板文件,添加gzip 配置,默认的interlock未开启gzip 配置
                               #gzip  on;
                                 gzip                    on;
                                 gzip_http_version       1.1;
                                 gzip_comp_level         2;
                                 gzip_proxied            any;
                                 gzip_min_length         1k;
                                 gzip_buffers            4   16k;
                                 gzip_types              text/plain application/x-javascript text/css application/xml text/javascript application/javascript application/json ;
                                 gzip_vary on;

                                 step 3 启动 interlock,nginx 容器
                                            docker run -P -d -ti --name interlock  \
                                            -v /tmp/interlock/config.toml:/etc/interlock/config.toml  \
                                            -v /tmp/interlock/template/nginx.conf.template:/etc/interlock/nginx.conf.template \
                                            -v /var/run/docker.sock:/var/run/docker.sock \    // 如果是 swarm 集群本地 sock 可以不挂载
                                            ehazlett/interlock:master -D run -c /etc/interlock/config.toml

                                            docker run -d -p 80:80 --label interlock.ext.name=nginx \
                                                               --link interlock --name inter_nginx nginx                                            
                              
                                             启动一个测试nginx服务
                                             docker run -d -p 80  --hostname=MM --label interlock.domain=XXOO.com  nginx

                                 step 4  查看 interlock 日志
                                             docker logs -f interlock

                                  INFO[0918] MM.XXOO.com: upstream=172.17.0.1:32818        ext=nginx
                                  DEBU[0918] proxy config path: /etc/nginx/nginx.conf      ext=lb
                                  DEBU[0918] detected proxy container:            id=2883c33c0312021bb25c433f03ba740e4e9be880193c3439a394c3a7da2cb325 backend=nginx  ext=lb
                                  DEBU[0918] proxyContainers: [{2883c33c0312021bb25c433f03ba740e4e9be880193c3439a394c3a7da2cb325                                       [/nginx_inter] nginx nginx -g 'daemon off;' 1467106027 Up 6 minutes [{ 443 0 tcp} {0.0.0.0 80 80 tcp}] 0 0 map[interlock.ext.name:nginx] {map[bridge:{ [] []  16b182096f7a0e2c5070e9576ba90fa7b40b7f51267b43e8c32044be20c6bcdb 172.17.0.1 172.17.0.3 16   0 02:42:ac:11:00:03}]}}]  ext=lb
                                  DEBU[0918] saving proxy config

                                 查看方向代理nginx 配置文件,是否有 gzip 配置,以及 MM.XXOO.com upstream 配置
                                 [root@VM_1_11_centos ~]# docker exec -ti nginx_inter  cat /etc/nginx/nginx.conf| grep -A2 -E "(gzip|XXOO)"
                                  #gzip  on;
                                    gzip                    on;
                                    gzip_http_version       1.1;
                                    gzip_comp_level         2;
                                    gzip_proxied            any;
                                    gzip_min_length         1k;
                                    gzip_buffers            4   16k;
                                    gzip_types              text/plain application/x-javascript text/css application/xml text/javascript application/javascript application/json ;
                                    gzip_vary on;


                                    proxy_connect_timeout 600;
                                    --
                                    upstream MM.XXOO.com {
                                                  zone MM.XXOO.com_backend 64k;

                                                           server 172.17.0.1:32818;
                                     --
                                                 server_name MM.XXOO.com;
        
                                     location / {
                                                proxy_pass
                                     }

                                    进入测试服务的 nginx 创建一个测试的 test.js 文件,更改hosts,测试结果
                                    

                                     目的达到, 测试服务可以正常访问,Response Headers Content-Encoding: gzip, OK 家走~

                           
                                                                                                                                                 Cail_wepiao

                                     参考资料:          

阅读(1765) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~