服务网格 Istio 全系列之二 —— Istio Bookinfo

1 bookinfo 架构介绍

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

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

image.png

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

Details:     图书详情服务

Ratings:    图书预订排名服务

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

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

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

image.png

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


2 bookinfo 配置与部署

2.1 配置 Istio 自动注入

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

# kubectl create ns jiuxi # 创建 jiuxi 命名空间
# kubectl label ns jiuxi istio-injection=enabled
# kubectl get ns jiuxi --show-labels
复制代码

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

image.png

2.2 部署 bookinfo 应用

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

# kubectl apply -f bookinfo/platform/kube/bookinfo.yaml -n jiuxi
复制代码

        部署过程截图如下:

image.png

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

kubectl get svc -n jiuxi

        服务列表截图如下:

image.png

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

# kubectl get pod -n jiuxi
复制代码

image.png

2.3 验证 bookinfo 部署情况

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

# kubectl get svc -n jiuxi
# curl http://SVC_CLUSTER_IP:9080 | grep -o "<title>.*</title>"
复制代码

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

image.png

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


3 设置 bookinfo 网关

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

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

3.1 定义 bookinfo 入口网关

# kubectl apply -f istio-1.4.5/samples/bookinfo/networking/bookinfo-gateway.yaml -n jiuxi
复制代码

3.2 确认网关已创建

# kubectl get gateways.networking.istio.io -n jiuxi
复制代码

image.png


4 访问 bookinfo 应用

4.1 获取 INGRESS_HOST

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

4.2 获取 INGRESS_PORT

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

4.3 通过浏览器访问 bookinfo 应用

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

image.png

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

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

image.png

image.png

        正好可以对应到 pod 信息:

image.png


5 卸载 bookinfo 应用

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

# ./istio-1.4.5/samples/bookinfo/platform/kube/cleanup.sh
复制代码

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

image.png

5.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 /     # 你要是真敢这么做,我就崇拜你
复制代码

6 总结

        本节通过 Bookinfo 应用完成了对 Istio 的基本认知。相信在操作的过程中,你还有很多不理解的地方,但是没关系,后续笔者会为你庖丁解牛的。你需要做的,就是跟着笔者操作一遍,熟悉一下整个流程,后续某天你一定会在某个瞬间大声尖叫:“我得到了”。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享