[译] Istio 1.1.0 下的 TCP 流量控制

栏目: 后端 · 发布时间: 5年前

内容简介:作者:Venil Noronha(VMWare开源技术中心工程师,关注Istio、Envoy项目)译者:马若飞 原文地址:https://venilnoronha.io/raw-tcp-traffic-shaping-with-istio-1.1.0

[译] Istio 1.1.0 下的 TCP 流量控制

作者:Venil Noronha(VMWare开源技术中心工程师,关注Istio、Envoy项目)

译者:马若飞 原文地址:https://venilnoronha.io/raw-tcp-traffic-shaping-with-istio-1.1.0

Istio通过虚拟服务, 目标规则, Gateway等概念提供了复杂的路由机制。Istio 1.0通过加权路由定义启用了HTTP流量转移。我提交的Envoy 和Istio的pull request为TCP/TLS服务提供了类似的特性。这一特性已经在Envoy 1.8.0中发布了。Istio中的这一特性也会在即将发布的1.1.0版本中提供使用。

[译] Istio 1.1.0 下的 TCP 流量控制

在本文中,我们将用 Go 编写的一个简单的TCP Echo服务,用 Docker 将其容器化并部署到Kubernetes上,并通过练习Istio的加权TCP路由特性来理解其在生产服务中的行为。

TCP Echo服务

在本文中,我们将创建一个简单的监听连接的TCP服务,并在客户端的请求数据加上一个简单的前缀,将其作为响应返回。图示如下:

[译] Istio 1.1.0 下的 TCP 流量控制

让我们看一下TCP Echo服务端的Go代码:

要测试这个程序,复制上面代码并命名为 main.go ,执行命令如下:

我们可以通过 nc (Netcat)在TCP层面上和这段程序交互。要发送请求,可以使用BusyBox容器,如下所示:

就像你看到的,在请求“world”前面加上了“hello”,“hello world”作为响应。注意,正在执行的BusyBox容器基于 Docker for Mac,这就是为什么我访问Echo服务端时用 docker.for.mac.localhost 代替了 localhost

容器化TCP Echo服务

因为我们最终想要在Kubernetes集群上运行TCP Echo服务,现在让我们将它容器化并发布镜像到 Docker Hub。

首先,用下面的内容创建 Dockerfile

构建容器并发布镜像到Docker Hub:

部署TCP Echo服务到Kubernetes

服务配置

我们需要部署2个版本的TCP ECHO服务,用不同的前缀展示路由行为。创建 service.yaml ,用Kubernetes Service 和2个 Deployments 构建2个版本的TCP ECHO服务。

部署Minikube

Minikube是Kubernetes本地开发的最佳工具。用下面的命令启动Minikube实例:

安装 Istio

在撰写本文时,Istio 1.1.0还没有发布。因此我使用了Istio的 Daily Pre-Release来演示这个新特性。请参考Istio文档学习下载和配置Istio。

一旦配置完成,这里有一个完全部署Istio组件的简单方法:

使用Istio代理部署TCP Echo服务

为了演示Istio的路由机制,我们以sidecar模式部署 tcp-echo-server

通过下面的命令来验证服务运行:

Istio加权TCP路由

这是本练习的最后一部分,定义 VirtualServiceDestinationRule 和带有权重路由的 Gateway ,并验证系统行为。

路由配置

创建带有两个 subsetDestinationRule 来代表两个版本的 TCP Echo服务。 Gateway 容许流量通过端口 31400 访问服务。最后, VirtualService 限定了80%的流量必须被路由到TCP Echo服务的v1版本,20%被路由到v2版本。

部署路由配置

为了让配置生效,复制上面的配置内容并创建文件 route-config.yaml ,用下面的命令进行安装:

验证Istio的TCP路由行为

先来确定一下Ingress的IP:

现在可以通过Ingress发送一些请求到加权负载均衡的TCP Echo服务:

如你所见,大约80%的请求带有“one”前缀,剩下20%带有“two”前缀。这证明了加权TCP路由器确实生效了。

下图能让你很好地了解这个示范的情景:

[译] Istio 1.1.0 下的 TCP 流量控制

清理

只需要像下面一样删除Minikube的部署:

总结

如本文所示,即将发布的Istio 1.1.0版本配置加权TCP路由非常容易。本文提供了构建一个加权TCP路由的思路,让你学会如何从头开始控制TCP流量。

点击 【阅读原文】 跳转 到ServiceMesher网站上浏览可以查看文中的链接。

相关阅读

[译] Istio 1.1.0 下的 TCP 流量控制

  • SOFAMesh( https://github.com/alipay/sofa-mesh )基于Istio的大规模服务网格解决方案

  • SOFAMosn( https://github.com/alipay/sofa-mosn )使用Go语言开发的高性能Sidecar代理

合作社区

[译] Istio 1.1.0 下的 TCP 流量控制

参与社区

以下是参与ServiceMesher社区的方式,最简单的方式是联系我!

  • 加入微信交流群: 关注本微信公众号后访问主页右下角有获取联系方式按钮,添加好友时 请注明姓名-公司

  • 社区网址: http://www.servicemesher.com

  • Slack: https://servicemesher.slack.com  (需要邀请才能加入)

  • GitHub: https://github.com/servicemesher

  • Istio中文文档进度追踪: https://github.com/servicemesher/istio-official-translation

  • Twitter: https://twitter.com/servicemesher

  • 提供文章线索与投稿: https://github.com/servicemesher/trans

[译] Istio 1.1.0 下的 TCP 流量控制


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

从入门到精通:Prezi完全解读

从入门到精通:Prezi完全解读

计育韬、朱睿楷、谢礼浩 / 电子工业出版社 / 2015-9 / 79.00元

Prezi是一款非线性逻辑演示软件,它区别于PowerPoint的线性思维逻辑;而是将整个演示内容铺呈于一张画布上,然后通过视角的转换定位到需要演示的位置,并且它的画布可以随时zoom in和zoom out,给演示者提供了一个更好的展示空间。 Prezi对于职场人士和在校学生是一个很好的发挥创意的工具,因为它的演示逻辑是非线性的,所以用它做出来的演示文稿可以如思维导图一样具有发散性,也可以......一起来看看 《从入门到精通:Prezi完全解读》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具