官方bookinfo示例
bookinfo显示有关书籍的信息,类似于在线书店的单个商品。页面上显示的是书籍,书籍详细信息(ISBN,页数等)以及一些书评。
Bookinfo应用程序分为四个独立的微服务:
- productpage。productpage微服务调用详细信息并查看微服务以填充页面。
- details。details微服务包含书籍信息。
- reviews。reviews微服务包含书评。它还称为评级微服务。
- ratings。ratings微服务包含伴随书评的书籍排名信息。
reviews微服务有3个版本:
- 版本v1不会调用评级服务。
- 版本v2调用评级服务,并将每个评级显示为1到5个黑色星。
- 版本v3调用评级服务,并将每个评级显示为1到5个红星。
应用程序的端到端架构如下所示。
部署应用程序
使用Istio不需要更改应用程序本身。相反,我们只需要在启用Istio的环境中配置和运行服务,并在每个服务旁边注入Envoy边车。所需的命令和配置因运行时环境而异,但在所有情况下,生成的部署将如下所示:
- 创建istio-app命名空间
kubectl create namespace istio-app
- 将
istio-app
命名空间设置为自动注入标签kubectl label namespace istio-app istio-injection=enabled
- 执行
kubectl apply -f samples/bookinfo/kube/bookinfo.yaml
部署好的productpage会自动注入sideCar 为程序定义网关入口
istioctl create -f gateway/gateway.yaml -n istio-app
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: istio-gateway
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "bookinfo.example.com"创建VirtualService
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- "bookinfo.example.com"
gateways:
- istio-gateway
http:
- match:
- uri:
exact: /productpage
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage.istio-app.svc.cluster.local
port:
number: 9080