官方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

参考文档

isito官方示例