Service Mesh新成员:Consul 1.2

640?wx_fmt=jpeg

本文译自 HashiCorp 官网关于 Consul 1.2 支持 Service Mesh 发布的博客文章。

原文链接:https://www.hashicorp.com/blog/consul-1-2-service-mesh作者:Mitchell Hashimoto 翻译:董干 转载自:https://blog.idevfun.io/consul-1-2-service-mesh/

本文是 HashiCorp 创始人 Mitchell Hashimoto 在 2018 年 6 月 26 日发布的关于 Consul 1.2 新功能 Service Mesh 的官方介绍。译者接触过的 Hashicorp 的产品有过不少,每款都给人感觉功能强大,设计简洁,可以说是都是非常优秀的开源产品(当然这与背后的 Hashicorp 公司商业级支撑有关)。译者有幸见过作者 Mitchell 一面,是个日裔混血,佩服他们取得的成就,期待他们推出的新功能能够取得市场上的成功。

Service Mesh 是最近很火的微服务新范式,以 Istio 为首的开源项目引领着潮流,其他各大公司也在迅速跟上,包括 Hashicorp 也在 Consul 中加入类似的功能。我们后续也将提供 Service Mesh 这方面更多的技术文章,敬请期待。


我们很激动宣布 HashiCorp Consul 1.2 正式发布了。这个版本主要新增了一个新的功能叫做 Connect, 它能够将现有的 Consul 集群自动转变为 service mesh (服务网格)的解决方案。Connect 通过自动 TLS 加密和基于鉴权的授权机制支持服务和服务之间的安全通信。

当前全球有数以百万计的机器上正部署着 Consul。当升级到 Consul 1.2 并打开 Connect 功能后,任何现有的集群将立刻变身为支持任何包括物理机、云、容器和调度器等各种平台的 service mesh 方案。

640?wx_fmt=jpeg

现代服务网络 Service Mesh

Service mesh 是企业和组织采用微服务以及动态云计算基础设施方案的必选方案。传统的基于主机的网络安全机制必须被替代为现代的基于服务的安全机制,以适应现代运行时环境的高度动态特性。

Service mesh 提供了以下三个关键问题的一种高可用分布式解决方案:

  • 服务发现:服务之间必须能够互相发现找到彼此。

  • 配置:服务必须能够从一个中心的配置源接收运行时的配置信息。

  • 隔离:服务之间的通信必须是被授权和加密的。

直到这个版本发布之前,Consul 分别用 DNS 解决了服务发现的使用场景,以及 K/V 存储解决了配置的使用场景。Connect 则将解决隔离的使用场景。这三项功能联合在一起提供了一种可运行在任何平台的 service mesh 完整解决方案。

Consul Connect

Connect 是 Consul 的一个主要新功能,旨在通过自动 TLS 加密和基于鉴权的授权机制提供服务之间的安全通信。今天宣布的 Connect 的功能是完全免费并且开源的。Consul 1.2 提供 Connect 功能面向公众的发布。

Connect 在设计开发时就贯注了易于使用的想法。它可以仅仅通过一个配置参数就打开,在服务注册时额外添加一行就可以使得任何现存的应用接受基于 Connect 的连接。证书更新是自动的,因此不会导致服务停机。对于所有必须的子系统,Connect 仅仅需要一个二进制文件就可以支持。后面我们会涵盖很多其他的功能。

640?wx_fmt=gif

在易于使用的基础上,Connect 暴露了 Consul 的很多新功能。这篇文章接下来会介绍其中一些功能的细节,不过让我们来先列举一下具有 Connect 的 Consul 所有主要的新功能:

  • 流量加密: 使用 Connect 创建的所有流量都是使用双向 TLS 的,这确保了所有流量在传输中都是经过加密的。这使得服务可以安全地部署在低信任度的环境中。

  • 连接授权: 使用 intentions 创建服务连接图,允许或拦截服务之间的通信。与防火墙使用 IP 地址不同,Connect 使用服务的逻辑命名。这意味着规则可以独立地进行扩展,无论有一个 web 服务还是 100 个。Intentions 可以通过界面、命令行、API 或者 HashiCorp Terraform 来进行配置。

  • Sidecar 代理: 应用可以使用轻量的 sidecar 代理进程来自动创建进出流量的 TLS 连接。这使得现有的应用可以不进行任何修改就可以使用 Connect。Consul 不仅提供了一个不需要任何外部依赖的内置代理,还提供了对例如 Envoy 等第三方代理的支持。

  • 原生集成: 对于性能非常敏感的应用,可以不使用代理,而通过集成原生 Consul Connect API 来创建和接受连接,从而获得更优的性能和安全。

  • 4 层 vs. 7 层: 鉴权是在 4 层实施的。Consul 将 7 层的功能和配置代理给可插拔式的数据层。你可以集成第三方代理,例如 Envoy,来提供诸如基于请求路径的路由,链路追踪和其他的功能,将 Consul 留作服务发现、鉴权和授权的功能。

  • 证书管理: Consul 使用 CA 生成并分发证书。Consul 提供了一个不依赖外部系统的内置 CA 系统,与 HashiCorp Vault 集成后,还可以扩展支持其他 PKI 系统。

  • 证书更新: Connect 可以自动更新根证书和子证书。根证书更新使用证书交叉签名来保证新老证书在更新期间可以共存,从而不影响服务。此系统还支持无缝配置新的 CA 提供商。

  • 基于 SPIFFE 的身份认证: Consul 使用 SPIFFE 规范进行身份识别和认证。这使得使用 Connect 的服务可以创建和接受来自其他遵守 SPIFFE 系统的连接。

  • 网络和云平台无关: Connect 使用基于 TCP/IP 的标准 TLS。这使得 Connect 可以支持任何网络配置,只要目标服务广播的 IP 地址在操作系统中可以访问。而且,服务之间可以进行跨云通信,而不借助于复杂的 overlay 层级。

自动 Sidecar 代理

应用可以无须进行任何修改,使用代理 sidecar 创建出入连接。在使用 Connect 后,仅仅添加如下一行服务注册配置就可以使得这个服务能够接受基于 Connect 的连接:

  1. {

  2.  "service": {

  3.    "name": "web",

  4.    "port": 8080,

  5.    "connect": { "proxy": {} }

  6.  }

  7. }

唯一的区别就是由 connect 开头的那行。这一行的存在使得 Consul 可以自动为这个服务启动和管理一个代理进程。这个代理进程代表了这个特定的服务。它在一个动态分配的端口上接受连接,验证并授权这个 TLS 连接,然后代理回一个标准的 TCP 连接到服务进程。

对于上游的依赖,可以多添加几行配置通过 Connect 监听连接并代理到服务。例如,假设我们的 “web” 服务需要和 “db” 服务通过 Connect 进行通信:

  1. {

  2.  "service": {

  3.    "name": "web",

  4.    "port": 8080,

  5.    "connect": {

  6.      "proxy": {

  7.        "config": {

  8.          "upstreams": [{

  9.             "destination_name": "db",

  10.             "local_bind_port": 9191

  11.          }]

  12.        }

  13.      }

  14.    }

  15.  }

  16. }

上面配置了一个受管代理并设置了监听本地 9191 端口将请求代理到任何远程 “db” 服务。通过配置 “web” 服务使用这个本地端口,所有 “web” 和 “db” 之间的通信都将成为加密的和已授权的。

需要注意的是这些例子中,原来的应用 “web” 保持 没有修改且感知不到 Connect 的存在。仅仅通过一行到几行的配置代码,任何应用都可以使用自动管理的代理 sidecar 来接受和创建 Connect 连接。

可以参阅 代理的使用手册文档 了解更多内容。如果某个应用有极高的性能需求,那么它可以 原生地集成Connect。这使得服务可以完全不需要代理。

开发友好的连接

为了最佳的安全性,服务应该尽量做到仅仅接受基于 Connect 的连接。然而,这给连接到服务进行开发或测试带来了挑战。Consul 提供了一种简单的方式通过使用 consul connect proxy 命令运行本地代理,从而使用 Connect 创建连接到服务。

考虑一个场景示例,一个 PostgreSQL 数据库服务仅接受来自 Connect 的连接,某运维工程师因为维护需要,想使用 psql 连接这个数据库。他可以在本地机器上通过 consul connect proxy 命令来使用 psql 进行连接:

  1. $ consul connect proxy -service mitchellh -upstream postgresql:9191

  2. ==> Consul Connect proxy starting...

  3.    Configuration mode: Flags

  4.               Service: mitchellh

  5.              Upstream: postgresql => :9191

  6.       Public listener: Disabled

  7. ...

在另外一个 shell 终端中,可以使用标准 psql 客户端连接:

  1. $ psql -h 127.0.0.1 -p 9191 -U mitchellh mydb

  2. >

其中 -service 命令参数代表了源服务的认证信息。服务并不需要存在,但是调用者必须拥有合法的 ACL token 来注册这个服务,Consul 必须配置为允许源和目标服务之间的连接。

对远程服务进行本地开发和测试是 service mesh 的一个常见工作流挑战,然而对于 Consul 和 Connect 来说却极为容易。

使用 Intentions 进行访问控制

服务之间的访问控制通过 “intentions” 进行配置。一个意向(intention)是一条从源到目的服务的允许或拦截规则。Intentions 可以通过 UI 界面、命令行、API 或 Terraform 进行创建。

640?wx_fmt=jpeg

按照上述示例,允许从 db 服务到 web 的访问,可以执行:

  1. $ consul intention create -allow web db

  2. Created: web => db (allow)

上述命令允许 “web” 服务同 “db” 服务进行通信。然后这个 intention 可以通过 -deny 立刻禁用两个服务之间的连接。

Intentions 也可以通过服务的部署进行单独管理,可以配置 ACL 规则,使得仅有特定的服务可以修改 intentions 。这使得安全和隔离可以动态并几乎实时地进行配置和管控。

更多内容 & 未来

我们对于 Consul 1.2 和它所支持的新功能很是激动。由于这个功能和它的影响较大,Consul 1.2 中提供的 Connect 应该被认为是 beta 阶段。这个夏天我们将在 Connect 上努力,希望在年底前能去掉 beta 的标签。

在将来,我们也会围绕 Connect 构建更多功能,包括新的 UI 增强、对 Envoy 代理的支持,以及同 Nomad 和 Kubernetes 的集成等等。Consul 1.2 中的 Connect 仅仅是个开始。

访问 https://www.consul.io/ 下载 Consul 1.2。

下面的页面能很好地进一步了解:

  • 功能主页 - 这是 Consul Connect 的专门主页,包含对所提供功能的总览和文档链接。

  • Connect 使用步骤 - Consul 使用步骤新增了一步 Connect 并包含快速入门的一个浏览介绍。

  • Connect 交互式教程 - 带你过一遍运行 Connect 关键步骤的交互式教程。

  • Connect 参考手册 - Connect 的文档手册中包含关于 Connect 如何工作、代理、原生集成和证书管理等等的所有细节。在部署 Connect 之前,推荐先阅读这个文档手册。

  • Connect 安全清单 - Connect 和 Consul 其余的部分相比有不同的安全需求。为了运维的安全性,我们推荐查看此清单,阅读并理解 Consul 的安全模型。

  • Connect 生产指引 - 这是生产环境配置 Consul 集群 Connect 功能的一个完整配置指引,包括配置最大限度安全的必要步骤。

  • Connect 白板介绍 - 这个视频是创始人兼联合 CTO Armon Dadgar 介绍 Connect 关于网络管理、安全和性能等方面的功能。


本文译自 HashiCorp 官网关于 Consul 1.2 支持 Service Mesh 发布的博客文章。

原文链接:https://www.hashicorp.com/blog/consul-1-2-service-mesh

作者:Mitchell Hashimoto 翻译:董干

原文地址:https://blog.idevfun.io/consul-1-2-service-mesh/

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P4564-[CTSC2018]假面【期望dp】

正题 题目大意:https://www.luogu.com.cn/problem/P4564 题目大意 nnn个人第iii个有mim_imi​点血,每次有操作 有ppp的概率对一个人造成111点伤害(如果死了就不算,ppp每次都不同)给出若干个人,对里面存活的人随机选择…

VAE(变分自编码器)学习笔记

VAE学习笔记 普通的编码器可以将图像这类信息编码成为特征向量. 但通常这些特征向量不具有空间上的连续性. VAE(变分自编码器)可以将图像信息编码成为具有空间连续性的特征向量. 方法是向编码器和解码器中加入统计信息,即特征向量代表的的是一个高斯分布,强迫特征向量服从高…

小 X 的 AK 计划

小 X 的 AK 计划 题目大意: 有n个点,到一个点(时间为距离)并花一些时间可以A掉此点,问最多可以A多少个点 原题: 解题思路: 先按位置从小到大排序,然后到每一个点并A掉的时间加在…

.NET Core 2.1的重大缺陷延长了.NET Core 2.0的寿命

微软近日宣布,.NET Core 2.0 即将 "寿终正寝",对它的支持将在2018年10月1日结束。.NET Core 2.0 是一个非长期支持(LTS)的版本,因此微软的承诺是在下一个版本发布的三个月之后结束对它的支持。由于 .NET Cor…

P4782-[模板]2-SAT问题【tarjan】

正题 题目链接:https://www.luogu.com.cn/problem/P4782 题目大意 给若干个条件限定为xi为a或xj为bx_i为a或x_j为bxi​为a或xj​为b。求构造一个序列xxx满足所有条件 解题思路 我们对于每个xix_ixi​构造两个点分别表示xix_ixi​为0/10/10/1。然后就开始对能够确定的条件关系…

区间dp专题

区间dp专题 基本思想 区间dp一类的问题往往子问题具有很明显的区间性质,也就是说我们可以通过将子问题定义为整个区间的一个子区间.因为一个大区间可以切分成两段相邻的子区间.从这点出发,我们便可以找到递推关系. 1.纸牌游戏 蜘蛛牌游戏规则是这样的:只能将牌拖…

.Net Core开发日志——Global Tools

.Net Core 2.1引入了一个新的功能,Global Tools,其本质是包含控制台应用程序的nuget包,目前而言,还没有特别有用的工具,不过相信随着时间的推移,各种有创意或者实用性强的Global Tools会出现在大家的视野里…

【DP】回文词 (ssl 1813)

回文词 ssl 1813 题目大意: 给出一个式子,最少要加多少个字符才能让这个式子是一个“回文词” 原题: 题目描述 回文词是一种对称的字符串,也就是说:一个回文词,从左向右读和从右向左读的结果都是一样的.任意给定一个字符串,通过插入若干…

POJ3678-Katu Puzzle【2-SAT】

正题 题目链接:http://poj.org/problem?id3678 题目大意 nnn个xix_ixi​为0/10/10/1。有mmm个条件表示xiandxjax_i\ and\ x_jaxi​ and xj​a或xiorxjax_i\ or\ x_jaxi​ or xj​a或xixorxjax_i\ xor\ x_jaxi​ xor xj​a。 求构造一组合法的xix_ixi​。 解题思路 讨论一下 …

Simple-Faster-RCNN源码学习笔记

Simple-Faster-RCNN 源码学习 项目github地址: https://github.com/chenyuntc/simple-faster-rcnn-pytorch 源码 源文件: model/utils/bbox_tools.py 方法: loc2bbox(src_bbox, loc) 参数含义: src_bbox描述的是bbox的坐标.loc表示的偏移(offsets)和缩放尺度(scales). 给…

API网关模式

什么是网关网关一词来源于计算机网络中的定义,网关(Gateway)又称网间连接器、协议转换器。网关的准确定义是: 两个计算机程序或系统之间的连接,网关作为两个程序之间的门户,允许它们通过不同计算机之间的协议通信来共享信息。顾名…

楼层

楼层 题目大意: 有两个数m和t,问1~m之间去掉有数字t的数之后还有多少个数 原题: 题目描述 mxy 感觉新世界的大门打开了。 ta 决定要在新世界的旅馆中找间房住。已知新世界每天都有一个高能的数字 t,这个数字在楼层中是不会出…

P3825-[NOI2017]游戏【2-SAT】

正题 题目链接:https://www.luogu.com.cn/problem/P3825 题目大意 nnn场比赛,对于场地aaa不能用赛车AAA(b,cb,cb,c以此类推),对于场地xxx可以用任何赛车。然后给定mmm条条件形如iIjJi\ I\ j\ Ji I j J表示在第iii场比赛使用赛车I…

CVPR19 基于图卷积网络的多标签图像识别模型 论文笔记

笔记 旷视研究院的研究员提出了如下模型,用于图像的多标签分类. 该模型与一般模型不一样的一点是,它的分类器是生成的,因此它有一个专门生成分类器的子网络. 网络主要由两部分构成 特征表示子网络,该网络由ResNet-101构成,即蓝色框圈出的部分.分类器生成子网络,该网络由3个…

日行千里,全凭“车”况,为什么我们要升级平台

历经一个半月的时间,不管是叫工业互联网平台还是叫工业大数据平台,从1.0版本升级到2.0版本,升级部分包括:客户端(网关)、服务端(数据接收、数据处理、计算服务)、底层数据库结构、WE…

朋友

朋友 题目大意: 有两堆数,只有第一堆数会和第二堆数中比自己小的数交“朋友”,问有多少对朋友 原题: 题目描述 mxy 即将前往新世界。 在前往新世界的过程中,ta 遇见了两种人。一种是只和 lowb 做朋友,…

好代码是管出来的——.Net Core中的单元测试与代码覆盖率

测试对于软件来说,是保证其质量的一个重要过程,而测试又分为很多种,单元测试、集成测试、系统测试、压力测试等等,不同的测试的测试粒度和测试目标也不同,如单元测试关注每一行代码,集成测试关注的是多个模…

P3694-邦邦的大合唱站队【状压dp】

正题 题目链接:https://www.luogu.com.cn/problem/P3694 题目大意 nnn个人,有mmm个队伍,每个人都属于一个队伍。要求叫出一些人来,然后任意插入出来的空隙中使得同一队的人在一起。求最少出列人数。 解题思路 如果知道最终的队列就可以十分…

数字图像处理作业

图像处理作业 1 取sT(r)11(mr)EsT(r)\frac{1}{1(\frac{m}{r})^E}sT(r)1(rm​)E1​ 其中rrr为原始亮度,mmm为输入区间的中点,EEE描述曲线的陡峭程度 2 一幅8灰度级图像具有如下所示的直方图,求直方图均衡后的灰度级和对应概率,…

【差分】侦察兵

侦察兵 题目大意: 给出一个图,再给一些点,求出这些点左上角和右下角的数之和 原题: 题目描述 mxy 沉迷于一个辣鸡游戏不可自拔。 游戏地图是一个 n*n 的矩形,在每个单位格子上有一个数字,代表当前位置…