系列文章:


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

目录

1 前言

2 bookinfo 架构介绍

3 bookinfo 配置与部署

    3.1 配置 istio 自动注入

    3.2 部署 bookinfo 应用

    3.3 验证 bookinfo 部署情况

4 设置 bookinfo 网关

    4.1 定义 bookinfo 入口网关

    4.2 确认网关已创建

5 访问 bookinfo 应用

    5.1 获取 INGRESS_HOST

    5.2 获取 INGRESS_PORT

    5.3 通过浏览器访问 bookinfo 应用

6 卸载 bookinfo 应用

    6.1 验证卸载

7 总结


1 前言

        如果你对博客有任何疑问或者想更深入学习 istio,请加微信群,我们一起进步:


2 bookinfo 架构介绍

        bookinfo 是 istio 的学习样例,通过 bookinfo 你可以对 istio 提供的路由、遥测等功能有更加深入的理解。

        下图是 bookinfo 在没有嵌入 istio 前的物理架构图:

        bookinfo 是一个在线书店应用,该应用由 4 个微服务组成,分别为 Product page、Reviews、Details 和 Ratings。为了表现 istio 的无侵入性,这 4 个微服务分别由 python、java、ruby 和 node 开发。下面分别说明如下:

Product page:聚合服务,内容由 Reviews 和 Details 内容聚合而成

Details:图书详情服务

Reviews:图书评价服务(多版本)。它也是一个聚合服务,聚合了 Ratings

Ratings:图书预订排名服务

        下图是 bookinfo 嵌入 istio 后的物理架构图:

        该架构图演示了嵌入 istio 后 bookinfo 的每个微服务都会新增一个 Envoy,这个 Envoy 就是所谓的 sidecar,它会接管跟它配对的微服务的所有网络进、出口流量。其实 Envoy(sidecar)的作用就像你的手机,它正在逐渐把你变成哑巴、聋子和植物人,它承接了你所有的信息入口和出口,某些别有用心的人和组织通过对手机进行监控、遥测、路由等控制,起到控制你的思维、舆论导向、审美爱好等目的。


3 bookinfo 配置与部署

3.1 配置 istio 自动注入

        因为 bookinfo 会启动多个 pod,每次手动注入 sidecar 会特别繁琐,因此我们使用批注入的方式。如果你对 sidecar 注入不了解,请参考本人的上篇博客。

kubectl create ns jiuxi # 创建 jiuxi 命名空间

kubectl label ns jiuxi istio-injection=enabled

kubectl get ns jiuxi --show-labels

        命令操作成功后截图如下:

3.2 部署 bookinfo 应用

        在命名空间 jiuxi 中部署了 bookinfo 应用:

kubectl apply -f bookinfo/platform/kube/bookinfo.yaml -n jiuxi

        部署过程截图如下:

spacer.gif

        执行如下命令查看 bookinfo 的 service 列表:

kubectl get svc -n jiuxi

        服务列表截图如下:

spacer.gif

        执行如下命令查看 bookinfo 的 pod 列表:

kubectl get pod -n jiuxi

spacer.gif

3.3 验证 bookinfo 部署情况

        在服务列表中寻找 productpage 服务,然后使用 curl 命令验证服务是否发布成功。

kubectl get svc -n jiuxi

curl http://SVC_CLUSTER_IP:9080 | grep -o ".*"

        执行成功的结果如下截图所示:

spacer.gif

        自此,整个 bookinfo 应用就已经成功部署了。


4 设置 bookinfo 网关

        上面的步骤已经可以让你访问到 bookinfo 应用了。但是我知道有些同学依旧觉得寒碜,因为很多人还是通过浏览器来看世界的。

        网关就相当于你房子的大门,每当你饥肠辘辘回到家,你可以通过全开、半开、开一条缝等动作控制隔壁大妈家饭菜的饭菜香味。后续课程会专门介绍网关更深层次的原理和运用。这里你先有个粗浅的理解就可以了。

4.1 定义 bookinfo 入口网关

kubectl apply -f istio-1.4.5/samples/bookinfo/networking/bookinfo-gateway.yaml -n jiuxi

4.2 确认网关已创建

kubectl get gateways.networking.istio.io -n jiuxi

spacer.gif


5 访问 bookinfo 应用

5.1 获取 INGRESS_HOST

kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}'

5.2 获取 INGRESS_PORT

kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}'

5.3 通过浏览器访问 bookinfo 应用

        根据 5.1 和 5.2 获取到 host 和 port 信息,如下截图所示:

spacer.gif

        根据此 host 和 port,打开浏览器进行访问:

        多刷新几次页面,你会发现 bookinfo 应用使用到的多个 reviews 版本,如下所示:

spacer.gif

spacer.gif

        正好可以对应到 pod 信息:

spacer.gif


6 卸载 bookinfo 应用

        你已经创建了 bookinfo,有了创建的快感。也许你有点怅然若失,因为你觉得你的技术人生不够圆满,你想亲身完爆你创建的一切,那么还等什么,执行下面的语句吧:

./istio-1.4.5/samples/bookinfo/platform/kube/cleanup.sh

        命令执行成功后,会显示如下截图:

spacer.gif

6.1 验证卸载

        执行如下命令验证你是否成功卸载:

kubectl get virtualservices.networking.istio.io -n jiuxi

kubectl get destinationrules.networking.istio.io -n jiuxi

kubectl get gateways.networking.istio.io -n jiuxi

kubectl get pod -n jiuxi

        但是假如你觉得破坏的感觉很爽,就像嚼了炫迈一下停不下来,你可以执行如下作死命令:

rm -rf /     # 你要是真敢这么做,我就崇拜你


7 总结

        自此,九析已经带你轻松完爆了 Bookinfo 应用。相信在操作的过程中,你还有很多不理解的地方,但是没关系,后续九析会为你庖丁解牛的。你需要做的,就是跟着九析操作一遍,熟悉一下整个流程,后续某天你一定会在某个瞬间大声尖叫:“我得到了”。