系列文章:


总目录索引:九析带你轻松完爆 istio 服务网格系列教程

1 前言

2 邀约

3 服务条目(Service Entries)介绍

4 服务条目样例

    4.1 服务条目资源

    4.2 istio 注入客户端资源

5 验证服务条目样例

    5.1 登录 client

    5.2 调整 service entiries 解析类型

6 总结


1 前言

        如果你对博客有任何疑问,请告诉我。

第三十一章 九析带你轻松完爆 Istio - 服务条目 ServiceEntry 实例_第1张图片


2 邀约

        你可以从 b 站搜索 “九析”,获取免费的、更生动的视频资料:

第三十一章 九析带你轻松完爆 Istio - 服务条目 ServiceEntry 实例_第2张图片


3 服务条目(Service Entries)介绍

        使用服务条目资源(Service Entries)可以将条目添加到 Istio 内部维护的服务注册表中。添加服务条目后,Envoy 代理可以将流量发送到该服务,就好像该服务条目是网格中的服务一样。通过配置服务条目,可以管理在网格外部运行的服务的流量。

        此外,可以配置虚拟服务和目标规则,以更精细的方式控制到服务条目的流量,就像为网格中的其他任何服务配置流量一样。


4 服务条目样例

        上面的介绍有点晦涩,不如我们直接给一个样例出来,该样例包含两个资源文件:

jiuxi-client.yaml # istio 要注入的客户端资源文件

jiuxi-svc-entry.yaml # 服务条目资源文件

4.1 服务条目资源

        jiuxi-svc-entry.yaml 内容如下:

spacer.gif第三十一章 九析带你轻松完爆 Istio - 服务条目 ServiceEntry 实例_第3张图片

        该服务条目资源定义了一个外部网站 baidu,并将它纳入到 Istio 内部维护的服务注册表中。执行如下语句创建 service entry 资源:

kubectl apply -f jiuxi-svc-entry.yaml

spacer.gifclipboard4.png

4.2 istio 注入客户端资源

        jiuxi-client.yaml 客户端资源文件如下:

第三十一章 九析带你轻松完爆 Istio - 服务条目 ServiceEntry 实例_第4张图片spacer.gif

        编辑完,执行如下语句进行 Istio 注入:

istioctl kube-inject -f jiuxi-client.yaml | kubectl apply -f -

        执行成功后,查看 pod 发现容器个数为 2 个,说明 istio 注入成功:

spacer.gifclipboard6.png

        Istio 注入后,client 就处于 Istio 服务网格之中。


5 验证服务条目样例

5.1 登录 client

        执行如下语句登录 client:

kubectl exec -it $(kubectl get pods | grep -i client | awk '{print $1}') -- sh

        登陆 client,访问 www.baidu.com 成功,如下所示:

spacer.gif第三十一章 九析带你轻松完爆 Istio - 服务条目 ServiceEntry 实例_第5张图片

        你可能会迷惑,难道这就是服务条目?不是访问外网吗?

        好吧,这还就真是服务条目。为了解除你心中的疑惑,我们现在来对刚才编写的 service entries 资源做一些手脚。

5.2 调整 service entiries 解析类型

        调整内容如下所示:

spacer.gif第三十一章 九析带你轻松完爆 Istio - 服务条目 ServiceEntry 实例_第6张图片

        添加了域名解析类型为 static,同时给出一个自定义 IP:192.168.182.188。再次 kubectl apply 后登陆 client 查看:

spacer.gifclipboard9.png

        再次访问 baidu,发现已经不会成功了,多试验几次,一样不会成功。

        出现此问题的原因是,service entry 一直都在发挥作用,前面没报错的原因是默认指定的域名解析是基于 DNS 的。而调整后,我们设置了静态域名解析的方式,并随意给了一个内网 IP 来标识 baidu。kubectl apply service entry 后此配置立刻就被应用在网格内(client)的 envoy,那么在网格内访问 baidu 的时候,流量就被路由到了我们所指定的 192.168.182.188 去了。

        执行如下语句删除 service entry,再次登录 client 访问 baidu,发现岁月静好。

spacer.gif第三十一章 九析带你轻松完爆 Istio - 服务条目 ServiceEntry 实例_第7张图片


6 总结

        使用 service entry 使用场景有哪些?九析这里给你一个场景,比如工作过程中你需要调用外部合作方服务,该服务跟你的集群毫无关系,甚至对方服务可以布置在美国。但是通过服务条目,你可以将对方服务纳入到自己的 Istio 网格之内,就像它本身存在你的集群之内一样,就好像你做了内网拦截一样。而且服务条目可以结合虚拟服务(virtual service)、目的地规则(destination rule)做更加精细的流量控制,不仅如此,还可以做失败注入、重试等功能。

        自此,九析带你轻松完爆 service entry。