docker 环境下通过ocelot和consul 实现服务发现与自治

摘要:
Ocelot介绍,Ocelot的目标目标是使用NET运行微服务/面向服务的体系结构,这需要一个统一的入口点。Ocelot是一组按特定顺序排列的中间件。下游服务的响应存储在每个请求范围的存储库中,并在请求返回到Ocelot管道时进行检索。基本上,它还有许多其他功能。Consul描述了Consul是一个服务网格解决方案,它提供了一个具有服务发现、配置和分段功能的全功能控制平面。Consul旨在对DevOps社区和应用程序开发人员友好,使其成为现代、弹性基础设施的理想选择。

Ocelot介绍

Ocelot的目标对象是使用.NET运行面向微服务/服务的架构,需要统一的入口点进入他们的系统。

特别是我希望与IdentityServer引用和承载令牌轻松集成。

Ocelot是一组按特定顺序排列的中间件。

Ocelot将HttpRequest对象操作到其配置指定的状态,直到它到达请求构建器中间件,在该中间件中,它创建一个HttpRequestMessage对象,该对象用于向下游服务发出请求。发出请求的中间件是Ocelot管道中的最后一件事。它不会调用下一个中间件。来自下游服务的响应存储在每个请求范围的存储库中,并在请求返回Ocelot管道时进行检索。有一个中间件将HttpResponseMessage映射到HttpResponse对象并返回给客户端。基本上它具有许多其他功能

docker 环境下通过ocelot和consul 实现服务发现与自治第1张

consul 介绍

Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全服务网格。Consul需要数据平面并支持代理和本机集成模型。Consul附带一个简单的内置代理,因此一切都可以开箱即用,但也支持第三方代理集成,如Envoy。

Consul的主要特点是:

  • 服务发现:Consul的客户可以注册服务,例如 apimysql,并且其他客户可以使用Consul来发现给定服务的提供者。使用DNS或HTTP,应用程序可以轻松找到它们所依赖的服务。

  • 运行状况检查:Consul客户端可以提供任意数量的运行状况检查,这些检查与给定服务(“是Web服务器返回200 OK”)或本地节点(“内存利用率低于90%”)相关联。运营商可以使用此信息来监控群集运行状况,服务发现组件使用此信息将流量路由远离不健康的主机。

  • KV商店:应用程序可以将Consul的分层键/值存储用于任何目的,包括动态配置,功能标记,协调,领导者选举等。简单的HTTP API使其易于使用。

  • 安全服务通信:Consul可以为服务生成和分发TLS证书,以建立相互的TLS连接。 意图 可用于定义允许哪些服务进行通信。可以使用可以实时更改的意图轻松管理服务分段,而不是使用复杂的网络拓扑和静态防火墙规则。

  • 多数据中心:Consul支持多个数据中心。这意味着Consul的用户不必担心构建额外的抽象层以扩展到多个区域。

Consul旨在对DevOps社区和应用程序开发人员友好,使其成为现代,弹性基础架构的理想选择。

通过consul实现动态转发

首先搭建consul集群  docker-compose.yml如下

consul-agent-1: &consul-agent
    image: consul:latest
    container_name: consul-agent-1
    networks: 
      - network
    command: "agent -retry-join consul-server-bootstrap -client 0.0.0.0"

  consul-agent-2:
    container_name: consul-agent-2
    <<: *consul-agent
  
  consul-agent-3:
    container_name: consul-agent-3
    <<: *consul-agent

  consul-server-1: &consul-server
    container_name: consul-server-1
    <<: *consul-agent
    command: "agent -server -retry-join consul-server-bootstrap -client 0.0.0.0"

  consul-server-2:
    container_name: consul-server-2
    <<: *consul-server

  consul-server-bootstrap:
    container_name: consul-server-bootstrap
    <<: *consul-agent
    ports:
     - "8400:8400"
     - "8500:8500"
     - "8600:8600"
     - "8600:8600/udp"
    command: "agent -server -bootstrap-expect 3 -ui -client 0.0.0.0"

搭建成功后进入http://localhost:8500 能进入consul的管理界面并查看当前的数据中心和consul节点以及注册的服务的健康状态

docker 环境下通过ocelot和consul 实现服务发现与自治第2张

consul 集群搭建成功后,然后将自己的业务微服务注册进入consul ,相关功能的代码已经上传到github上 ,地址:https://github.com/singlewanderwolf/ConsuleRegister 可以参考下。

 记住业务微服务需要加上健康检查  不然consul是没法监控该服务的 

docker 环境下通过ocelot和consul 实现服务发现与自治第3张

当将我们的微服务注册进入consul之后,就可以通过consul来实现ocelot的自动转发了, ocelot的配置如下

{
  "ReRoutes": [],
  "Aggregates": [],
  "GlobalConfiguration": {
    "BaseUrl": "http://phoenix.local.newv.com.cn",
    "RequestIdKey": "NewvOcRequestId",
    "AdministrationPath": "/administration",
    "ServiceDiscoveryProvider": {
      "Host": "consul-server-bootstrap",
      "Port": 8500,
      "Type": "Consul"
    },
    "DownstreamScheme": "http",
    "RateLimitOptions": {
      "ClientIdHeader": "ClientId",
      "QuotaExceededMessage": null,
      "RateLimitCounterPrefix": "ocelot",
      "DisableRateLimitHeaders": false,
      "HttpStatusCode": 429
    },
    "QoSOptions": {
      "ExceptionsAllowedBeforeBreaking": 0,
      "DurationOfBreak": 0,
      "TimeoutValue": 0
    },
    "LoadBalancerOptions": {
      "Type": "LeastConnection",
      "Key": null,
      "Expiry": 0
    },
    "HttpHandlerOptions": {
      "AllowAutoRedirect": false,
      "UseCookieContainer": false,
      "UseTracing": false
    }
  }
}

注意 ReRoutes中不能放入任何其他配置规则。

配置完成后并启动服务后。浏览器中输入localhots:5000/servicename/api/v1/value,ocelot会根据url的第一段servicename 去询问consul 并得到实际的服务地址进行转发,实际转发的地址为http:servicehost:serviceport/api/v1/value  

免责声明:文章转载自《docker 环境下通过ocelot和consul 实现服务发现与自治》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇钉钉小程序中苹果手机/iphone/IOS端音频无法播放和音频每次播放速度都加快的原因及解决方法解决Maven项目构建后配置文件在target文件夹中不存在的问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Docker Swarm 常用命令

# 管理配置文件 docker config     # 查看已创建配置文件     - docker config ls     # 将已有配置文件添加到docker配置文件中     - docker config create docker 配置文件名 本地配置文件  # 管理swarm节点 docker node     # 查看集群中的...

win10安装docker步骤

一、启用Hyper-V  打开控制面板 - 程序和功能 - 启用或关闭Windows功能,勾选Hyper-V,然后点击确定,之后重启电脑; 注意不能同时安装VMware; 二、去docker注册账号,地址:https://hub.docker.com; 注册完账号后登陆可以在线下载docker 安装包 下载完成后运行安装包,安装完成后界面如图: 单击C...

Django项目的docker镜像制作

最近搞了个django项目,在各个环境部署时总会遇到问题,于是便想到了docker部署,接下来记录一下一下docker镜像制作部署的流程。 基础镜像:镜像中运行的项目或者启动的一些服务,都要在一个基础镜像之上才能运行这些服务,比如一个django项目或者mysql数据库等,都要在Linux操作系统之上来运行,所以打包我们自己的项目时,必须要有个基础镜像来当...

Dockerfile注意事项

准则 尽量将Dockerfile放在空目录中,如果目录中必须有其他文件,则使用.dockerignore文件。 避免安装不必须的包。 每个容器应该只关注一个功能点。 最小化镜像的层数。 多行参数时应该分类。这样更清晰直白,便于阅读和review,另外,在每个换行符前都增加一个空格。 对构建缓存要有清楚的认识。 指令注意事项 FROM Dockerfil...

把ABP框架部署到Docker中

本文旨在将Abp项目部署到Docker容器中,借助Gitee存储,Jenkins持续构建,利用Docker Compose生成镜像、启动镜像,在官网给定的Abp项目中,虽然用到了Dockerfile、Docker Compose,但是没有资料指明该如何使用这两个文件,借此我通过改造这两个文件来完成Abp部署任务。 一、前期准备工作 1、把从Abp官网下载下...

docker 存储驱动之 overlay2

overlay2 简介   OverlayFS是一种和AUFS很类似的文件系统,与AUFS相比,OverlayFS有以下特性:    1) 更简单地设计   2) 从3.18开始,就进入了Linux内核主线   3) 可能更快一些   因此,OverlayFS在Docker社区关注度提高很快,被很多人认为是AUFS的继承者。就像宣称的一样,OverlayF...