基于容器的后端服务架构

   2016-12-01 0
核心提示:基于容器的后端服务架构在探索kubernetes的应用时,调研了几个gateway,发现fabio支持发现服务,自动生成路由,结合consul,registrator, 可以很容易的部署一套服务,比较轻量,很容易玩起来。 结构大致为: Start Consul安装 consul, 如果检测到多个 private

基于容器的后端服务架构

在探索kubernetes的应用时,调研了几个gateway,发现fabio支持发现服务,自动生成路由,结合consul,registrator, 可以很容易的部署一套服务,比较轻量,很容易玩起来。

结构大致为:

基于容器的后端服务架构

Start Consul

安装 consul, 如果检测到多个 private ip, 会报错,可以用 -advertise 指定一个ip.

sudo docker run -d --name=consul --net=host gliderlabs/consul-server -bootstrap -advertise=172.28.128.3 -ui

curl 172.28.128.3:8500/v1/catalog/services

Start Registrator

启动 registrator, 因为需要调用docker api, 所以需要把docker.sock 映射到容器内部,如果你使用了tcp, 那么需要设置对应的url。

如果你希望上报容器内部ip:port, 那么需要在启动参数中加入 -internal=true , 这样注册的 Service, 都是容器内部的ip, 而port对于同一个service而言,一般是固定的,例如 一个hello服务的两个实例分别为 10.10.1.12:9090, 10.10.1.13:9090. 这样的话,就需要配置一个容器跨host的网络方案,例如 flannel, 等。 可以参考上一篇Flannel with Docker

为了简便测试,这里就不配置flannel了。 -ip 是指定注册service时候使用的ip,建议要指定,选取当前机器的内网 private ip即可。我这里是 172.28.128.3 .

sudo docker run -d --name=registrator --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:latest -ip=172.28.128.3 consul://172.28.128.3:8500

Start service

启动服务,这里需要注意的是这些环境变量,作用是 override Registrator的默认值,见名知意,在 registrator 文档中有详细介绍。例如 SERVICE_9090_NAME 就是指 端口为 9090 的service 的 name。

需要注意的是 tags 这个字段, urlprefix-/foo,hello , 这里 urlprefix- 是 gateway 的一种配置,意思为 把访问 /foo 为前缀的请求转发到当前应用来。他能够匹配到例如 /foo/bar , footest , 等。如果你想加上域名的限制,可以这样 urlprefix-mysite.com/foo 。 后面还有一个 hello , 作用是给这个service打一个标记,可以用作查询用。

sudo docker run -d -P -e SERVICE_9090_CHECK_HTTP=/foo/healthcheck -e SERVICE_9090_NAME=hello -e SERVICE_CHECK_INTERVAL=10s -e SERVICE_CHECK_TIMEOUT=5s -e SERVICE_TAGS=urlprefix-/foo,hello silentred/alpine-hello:v2

curl 172.28.128.3:8500/v1/catalog/services
//现在应该能看到刚启动的hello服务了
{"consul":[],"hello":["urlprefix-mysite.com/foo","hello","urlprefix-/foo"]}

测试 DNS

sudo yum install bind-utils
dig @172.28.128.3 -p 8600 hello.service.consul SRV

Start Gateway

前端Gateway 根据 consul中注册的 service,生成对应的路由规则,把流量分发到各个节点。 这个项目还有一个 ui 管理 route信息,端口为 9998。

创建一个配置文件 fabio.properties

registry.consul.addr = 172.28.128.3:8500

在当前目录运行

docker run -d -p 9999:9999 -p 9998:9998 -v $PWD/fabio.properties:/etc/fabio/fabio.properties magiconair/fabio

基于容器的后端服务架构

Health Check

sudo ifdown eth1

curl http://localhost:8500/v1/health/state/critical

[
    {
        "Node":"localhost.localdomain",
        "CheckID":"service:afa2769cd049:loving_shannon:9090",
        "Name":"Service 'hello' check",
        "Status":"critical",
        "Notes":"",
        "Output":"Get http://172.28.128.6:32768/foo/healthcheck: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)",
        "ServiceID":"afa2769cd049:loving_shannon:9090",
        "ServiceName":"hello",
        "CreateIndex":379,
        "ModifyIndex":457
    }
]

sudo ifup eth1

在启动 consul的时候,我们使用了 -ui 参数,我们可以在 172.28.128.3:8500/ui 访问到consul的web ui管理界面,看到各个服务的状态.

基于容器的后端服务架构

对比

注册容器外IP:

每个注册的service的port都是变化的,并且因为映射内部port到了host,外部可以随意访问,私密性较弱。

注册容器内IP:

每个注册的service的port都是固定的,只能从容器内部访问。如果用 flannel,可能有一些性能损失。

 
标签: Docker Linux命令
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 在阿里云主机的Debian操作系统上安装Docker
    因为需要新搭建饭团网站,所以需要在阿里云的主机上跑数据库,java环境。考虑到可扩展性和模块化,所以准备最近流行的docker技术。Docker —— 从入门到实践阿里云主机1核1G,资源不多,所以就装debian了。欢迎捐助 ????## 下面命令都是以root用户执行## 查看
    02-10
  • 中科大debian 9 + docker源设置
    wget https://mirrors.ustc.edu.cn/repogen/conf/debian-http-4-stretch -O sources.listsudo apt-get install \      apt-transport-https \      ca-certificates \      curl \      gnupg2 \      software-properties-commoncu
    02-10
  • 外部访问docker内部容器centos的http服务
    1.创建容器docker run -d -it -h dd -p 5000 --name bbbbb centosdd 是用户名 --name 后面是容器名字2.在我们开始安装Nginx及其他所需软件之前先安装一些前提软yum install python-setuptools yum -y install epel-release yum install python-pip pip instal
    02-10
  • apache ignite docker集群运行试用
    apache ignite docker集群运行试用
    apache ignite 是一个很不错的内存计算平台常见参考使用场景应用缓存加速   数据集成hub   基于容器的集群环境部署环境准备说明为了方便基于静态ip发现的模式进行集群的搭建,关于静态ip配置,核心如下 bean class="org.apache.ignite.spi.discovery.t
    02-10
  • 通过docker创建并使用apache容器
    目标: 制作一个承载apache的镜像,并在一个Linux内启动5个apache容器对外提供服务1、安装apachedocker run -t -i --name=qxy_apache centosyum -y install httpdexit2、制作镜像docker commit qxy_apache qxy_apache:v1.0[root@centos-1 ~]# docker imagesRE
    02-10
  • 使用docker-compose部署nginx docker compose使
     1、新建docker-compose.yml文件,文件的基本模板如下:(由于yml格式比较严格,注意空格缩进)version: '2.0'services:nginx:restart: alwaysimage: nginx:1.11.6-alpineports:- 8080:80- 80:80- 443:443volumes:- ./conf.d:/etc/nginx/conf.d- ./log:/var/
    02-10
  • nginx 代理 registry docker certificate is v
    1.配置SSL证书及nginx反向代理docker registry搭建私有CA,初始化CA环境,在/etc/pki/CA/下建立证书索引数据库文件index.txt和序列号文件serial,并为证书序列号文件提供初始值。# touch /etc/pki/CA/{index.txt,serial}# echo 01/etc/pki/CA/serial2.生成密
    02-10
  • Docker安装配置Nginx docker安装配置caffe
    Docker安装配置Nginx docker安装配置caffe
    docker pull nginx2.启动Nginxdocker run --name nginx -d -p 80:80 nginx3.创建Nginx配置文件目录  mkdir /data/nginx/html docker cp nginx:/etc/nginx/nginx.conf /data/nginx/ docker cp nginx:/etc/nginx/conf.d/ /data/nginx/conf.d/  4.停止并删除n
    02-10
  • docker 制作自定义的nginx镜像
    docker 制作自定义的nginx镜像
    1、启动一个centos基础系统[root@docker ~]# docker run -it --name mynginx centos /bin/bash[root@a8882e2ef0d9 /]#2、安装wget,默认没有的[root@a8882e2ef0d9 /]# yum install -y wget3、安装nginx[root@a8882e2ef0d9 /]# yum install -y nginx4、修改配置
    02-10
  • docker之Dockerfile实践用dockerfile构建nginx环境
    


		
docker之Dockerfile实践
    docker之Dockerfile实践用dockerfile构建nginx
    https://blog.csdn.net/wuapeng/article/details/80974417 上一篇介绍了Dockerfile中使用的指令,现在开始进行指令实践先查看下本地的镜像,选一个作为base image:[root@docker ~]# docker imagesREPOSITORY TAG IMAGE IDCREATED SIZEwadeson/centos_nginx
    02-10
点击排行