在 productpage 启用 Istio

    在这个模块中,您可以在 微服务中,启用Istio。这个应用的其他部分会继续照原样运行。注意您可以一个微服务一个微服务的逐步启用 Istio。启用 Istio 在微服务中是无侵入的,您不用修改微服务代码或者破坏您的应用,它也能够持续运行并且为用户请求服务。

    1. 应用默认目标规则:

    2. 重新部署 productpage 微服务,启用 Istio:

      本教程为了教学目的将会逐步演示手动注入 Sidecar 去启用 Istio,但是 自动注入 Sidecar 更加方便.

      1. $ curl -s https://raw.githubusercontent.com/istio/istio/release-1.14/samples/bookinfo/platform/kube/bookinfo.yaml | istioctl kube-inject -f - | sed 's/replicas: 1/replicas: 3/g' | kubectl apply -l app=productpage,version=v1 -f -
      2. deployment.apps/productpage-v1 configured
    3. 进入应用的网页去验证应用是否在工作。Istio 是在没有改变原应用代码的情况下添加的。

    4. Kubernetes 采取无侵入的和逐步的方式用启用 Istio 的 Pod 替换了原有的 Pod。Kubernetes 只有在新的 Pod 开始运行的时候才会终止老的 Pod,它透明地将流量一个一个地切换到新的 Pod 上。也就是说,它不会在声明一个新的 Pod 之前结束一个或者以上的 Pod。这些操作都是为了防止破坏您的应用,因此在注入 Istio 的过程中应用能够持续工作。

      1. $ kubectl logs -l app=productpage -c istio-proxy | grep GET
      2. ...
      3. [2019-02-15T09:06:04.079Z] "GET /details/0 HTTP/1.1" 200 - 0 178 5 3 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15" "18710783-58a1-9e5f-992c-9ceff05b74c5" "details:9080" "172.30.230.51:9080" outbound|9080||details.tutorial.svc.cluster.local - 172.21.109.216:9080 172.30.146.104:58698 -
    5. 输出命名空间,您将会在 Istio 仪表盘中通过它来识别您的微服务:

    6. 检查 Istio 仪表盘,通过自定义的 URL, 它配置在您之前配置/etc/hosts 文件中:

      1. http://my-istio-dashboard.io/dashboard/db/istio-mesh-dashboard

      在左上角的下拉菜单中,选择 Istio Mesh Dashboard

      在左上角的下拉菜单中,选择 Istio Mesh Dashboard

      注意 在命名空间中的 productpage 服务,它的命名应该是 productpage.<your namespace>.svc.cluster.local

      Istio Mesh Dashboard

    7. 在 Istio Mesh 仪表盘中,在 列下,单击 productpage 服务。

      Istio Service Dashboard, `productpage` selected

      向下滚动到 Service Workloads 部分。观察到仪表盘图表已经更新。

      Istio Service Dashboard

      Istio Service Dashboard

    这是在一个微服务中应用 Istio 的直接优点,您可以收到进出微服务的流量日志,包括时间、HTTP方法、路径和响应代码。您可以用 Istio 仪表盘监控您的微服务。

    您已经准备好。