Bookinfo

这个指南展示一个简单的例子,我们通过编排四个分离的微服务来验证Istio服务网格的多种功能。

Overview

在这个指南中我们展示了一个简单的应用,它展示一本书的信息,类似于在线书店的单个目录条目。页面展示书的描述,细节(ISBN,页数等),还有一些书评。
Bookinfo应用被分为四个分离的微服务:

  • productpage。微服务productpage调用detailsreviews 填充页面。
  • details。 微服务details 包含书的信息。
  • reviews。 微服务reviews 包含书评,同时调用ratings
  • ratings。 微服务ratings 包含带有书评的书籍排名信息。

reviews 有三个版本:

  • Version v1 不调用ratings
  • Version v2 调用ratings,展示1到5颗黑星
  • Version v3 调用ratings,展示1到5颗红星

应用的端到端架构如下
Bookinfo_第1张图片

这个应用包含多种语言,也就是说,微服务是用不同语言写的。值得注意的是,这些服务与istio没有任何依赖关系,但是提供了一个有趣的服务网格示例,特别是reviews服务有多个服务版本,以及多种实现语言。

Before you begin

如果你还没装Istio,对照你平台的 installation guide指令去安装。

Deploying the application

用Istio运行例子不需对应用本身做任何改变。相反,我们只需在Istio允许的环境配置和运行服务,这个环境是Envoy sidecars注入到每个服务提供的。所需的命令和配置取决于运行时环境,但是所有情况下,生成的部署如下:
Bookinfo_第2张图片
所有微服务都被Envoy sidecar包装,它拦截服务的出入调用,提供外部控制所需的钩子,通过Istio的控制平面为整个应用程序提供路由,遥测收集和策略执行。

对应你的Istio运行环境,按照下面介绍启动应用。

Running on Kubernetes

注意: 如果你使用GKE,请确保你的集群有至少4个标准GKE节点。如果你使用Minikube,确保你有至少4GB RAM。

  • 进入Istio安装根目录
  • 启动应用容器

如果你使用 manual sidecar injection,使用如下命令:

kubectl apply -f <(istioctl kube-inject --debug -f samples/bookinfo/kube/bookinfo.yaml)

如果你的集群能够 automatic sidecar injection,只需使用kubectl

kubectl apply -f samples/bookinfo/kube/bookinfo.yaml

命令 istioctl kube-inject 在手动创建deployments 前修改 bookinfo.yaml 文件。参见 here.
上述任一命令部署所有四个微服务,并新建网关ingress资源,如上图所示。reviews 的三个版本 v1, v2, and v3, 都启动了。

注意: 在真实的deployment中,应该随着版本时间的推移部署新版本的微服务,而不是同时部署所有版本。

  • 确认所哦有服务和pods正确运行:
kubectl get services

结果如下:

NAME                       CLUSTER-IP   EXTERNAL-IP   PORT(S)              AGE
details                    10.0.0.31    <none>        9080/TCP             6m
kubernetes                 10.0.0.1     <none>        443/TCP              7d
productpage                10.0.0.120   <none>        9080/TCP             6m
ratings                    10.0.0.15    <none>        9080/TCP             6m
reviews                    10.0.0.170   <none>        9080/TCP             6m

以及

kubectl get pods

结果:

NAME                                        READY     STATUS    RESTARTS   AGE
details-v1-1520924117-48z17                 2/2       Running   0          6m
productpage-v1-560495357-jk1lz              2/2       Running   0          6m
ratings-v1-734492171-rnr5l                  2/2       Running   0          6m
reviews-v1-874083890-f0qf0                  2/2       Running   0          6m
reviews-v2-1343845940-b34q5                 2/2       Running   0          6m
reviews-v3-1813607990-8ch52                 2/2       Running   0          6m

Determining the ingress IP and Port

1.如果你的k8s集群支持外部负载均衡,ingress的IP地址可以用下面命令获得:

kubectl get ingress -o wide

结果类似:

NAME      HOSTS     ADDRESS                 PORTS     AGE
gateway   *         130.211.10.121          80        1d

ingress服务的地址

export GATEWAY_URL=130.211.10.121:80

2.Minikube: 在Minikube中不支持外部负载均衡。你可以使用ingress service的host IP,以及NodePort去访问ingress。

export GATEWAY_URL=$(kubectl get po -l istio=ingress -n istio-system -o 'jsonpath={.items[0].status.hostIP}'):$(kubectl get svc istio-ingress -n istio-system -o 'jsonpath={.spec.ports[0].nodePort}')

What’s next

为了确认Bookinfo正在运行,使用命令curl

curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage

返回

200

你也可以在浏览器上访问Bookinfo的网页 http://$GATEWAY_URL/productpage 。如果你刷新几次页面,你就会在productpage看到reviews的几个不同版本,以一种循环的方式出现(red stars, black stars, no stars),而我们还没有使用Istio去控制版本路由。

Clean up

当你尝试完成Bookinfo示例,你可以使用如下步骤卸载和清理它。

Uninstall from kubernetes environment

1.删除路由规则并终止应用pods

samples/bookinfo/kube/cleanup.sh

2.确认关闭

istioctl get routerules   #-- there should be no more routing rules
kubectl get pods          #-- the Bookinfo pods should be deleted
Uninstall from Docker environment

1.删除路由规则及应用容器
2.确认清理

istioctl get routerules   #-- there should be no more routing rules
docker ps -a              #-- the Bookinfo containers should be deleted

你可能感兴趣的:(翻译)