内容简介:作者:Venil Noronha(VMWare开源技术中心工程师,关注Istio、Envoy项目)译者:马若飞 原文地址:https://venilnoronha.io/raw-tcp-traffic-shaping-with-istio-1.1.0
作者: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版本中提供使用。
在本文中,我们将用 Go 编写的一个简单的TCP Echo服务,用 Docker 将其容器化并部署到Kubernetes上,并通过练习Istio的加权TCP路由特性来理解其在生产服务中的行为。
TCP Echo服务
在本文中,我们将创建一个简单的监听连接的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路由
这是本练习的最后一部分,定义 VirtualService
, DestinationRule
和带有权重路由的 Gateway
,并验证系统行为。
路由配置
创建带有两个 subset
的 DestinationRule
来代表两个版本的 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路由器确实生效了。
下图能让你很好地了解这个示范的情景:
清理
只需要像下面一样删除Minikube的部署:
总结
如本文所示,即将发布的Istio 1.1.0版本配置加权TCP路由非常容易。本文提供了构建一个加权TCP路由的思路,让你学会如何从头开始控制TCP流量。
点击 【阅读原文】 跳转 到ServiceMesher网站上浏览可以查看文中的链接。
相关阅读
-
SOFAMesh( https://github.com/alipay/sofa-mesh )基于Istio的大规模服务网格解决方案
-
SOFAMosn( https://github.com/alipay/sofa-mosn )使用Go语言开发的高性能Sidecar代理
合作社区
参与社区
以下是参与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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。