68

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

 6 years ago
source link: https://mp.weixin.qq.com/s/UuTrPlO4yk2uHfIXfsfiAA?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

NJnaeyr.jpg!web

作者: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版本中提供使用。

ZB3ey2a.jpg!web

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

TCP Echo服务

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

JRBnqmv.jpg!web

让我们看一下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路由器确实生效了。

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

vAfmIbv.jpg!web

清理

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

总结

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

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

相关阅读

MnAvQfn.jpg!web

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

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

合作社区

aq6ZraM.jpg!web

参与社区

以下是参与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

IZrUnui.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK