现代应用程序通常被设计成微服务的分布式集合,每个服务执行一些离散的业务功能。服务网格是专门的基础设施层,包含了组成这类体系结构的微服务网络。 服务网格不仅描述了这个网络,而且还描述了分布式应用程序组件之间的交互。所有在服务之间传递的数据都由服务网格控制和路由。
随着分布式服务的部署——比如基于 Kubernetes 的系统——规模和复杂性的增长,它可能会变得更加难以理解和管理。 需求可以包括发现、负载平衡、故障恢复、度量和监视。微服务体系结构通常还有更复杂的操作需求,比如 A/B 测试、canary 部署、速率限制、访问控制、加密和端到端身份验证。
服务到服务的通信使分布式应用成为可能。在应用程序集群内部和跨应用程序集群路由这种通信变得越来越复杂。 Istio 有助于减少这种复杂性,同时减轻开发团队的压力。
这里我使用的是minikube ,因此在安装之前,首先要给minikube一定的空间
minikube start --memory=16384 --cpus=4 --kubernetes-version=v1.26.1
新开一个终端,打开minikube通道
minikube tunnel
使用自动化工具下载并提取最新版本的istio
#curl -L https://istio.io/downloadIstio | sh -
#cd istio-1.20.2
#export PATH=$PWD/bin:$PATH
#istioctl install --set profile=demo -y
? Istio core installed
? Istiod installed
? Egress gateways installed
? Ingress gateways installed
? Installation complete
安装目录包含:
创建命名空间,并打上istio-injection=enable
之后,这个命名空间下的pod会自动注入Envoy Sidecar
#kubectl create namespace fox
namespace/fox created
#kubectl label namespace fox istio-injection=enable
namespace/fox labeled
这个应用模仿在线书店的一个分类,显示一本书的信息。 页面上会显示一本书的描述,书籍的细节(ISBN、页数等),以及关于这本书的一些评论。
productpage
:这个微服务会调用 details 和 reviews 两个微服务,用来生成页面。details
:这个微服务中包含了书籍的信息。reviews
:这个微服务中包含了书籍相关的评论。它还会调用 ratings 微服务。ratings
:这个微服务中包含了由书籍评价组成的评级信息。reviews 微服务有 3 个版本:
Bookinfo 应用中的几个微服务是由不同的语言编写的。 这些服务对Istio并无依赖,但是构成了一个有代表性的服务网格的例子:它由多个服务、多个语言构成,并且 reviews 服务具有多个版本。
要在 Istio 中运行这一应用,无需对应用自身做出任何改变。 您只要简单的在 Istio 环境中对服务进行配置和运行,具体一点说就是把 Envoy Sidecar 注入到每个服务之中。 最终的部署结果将如下图所示:
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -n fox
通过minikube 进行端口暴露
minikube service -n fox productpage --url
kubectl apply -f sample/addons
minikube service -n istio-system kiali --url