1.部署 Bookinfo 应用
要在 Istio 中运行这一应用,无需对应用自身做出任何改变。我们只要简单的在 Istio 环境中对服务进行配置和运行,具体一点说就是把 Envoy sidecar 注入到每个服务之中。这个过程所需的具体命令和配置方法由运行时环境决定,而部署结果较为一致,如下图所示:
所有的微服务都和 Envoy sidecar 集成在一起,被集成服务所有的出入流量都被 sidecar 所劫持,这样就为外部控制准备了所需的 Hook,然后就可以利用 Istio 控制平面为应用提供服务路由、遥测数据收集以及策略实施等功能。
接下来可以根据 Istio 的运行环境,按照下面的讲解完成应用的部署。
- 进入 Istio 安装目录。
-
启动应用容器:
- 如果集群用的是手工 Sidecar 注入,使用如下命令:
istioctl kube-inject 命令用于在在部署应用之前修改
bookinfo.yaml
- 如果集群使用的是自动 Sidecar 注入,只需简单的
kubectl
就能完成服务的部署。
上面的命令会启动全部的四个服务,其中也包括了
reviews
服务的三个版本(v1
、v2
以及v3
) -
给应用定义 Ingress gateway:
-
确认所有的服务和 Pod 都已经正确的定义和启动:
-
确定 Ingress 的 IP 和端口
执行以下命令以确定
ingressgateway
是否启用了 NodePort 模式。确定 ingress IP:
确定端口:
-
设置
GATEWAY_URL
:
下面可以用 curl
命令来确认 Bookinfo 应用的运行情况:
还可以用浏览器打开网址 http://$GATEWAY_URL/productpage
,来浏览应用的 Web 页面。如果刷新几次应用的页面,就会看到页面中会随机展示 reviews
服务的不同版本的效果(红色、黑色的星形或者没有显示)。reviews
服务出现这种情况是因为我们还没有使用 Istio 来控制版本的路由。
3. 金丝雀部署
由于 Bookinfo 示例部署了三个版本的 reviews 微服务,因此我们需要设置默认路由。 否则,如果您当多次访问应用程序,您会注意到有时输出包含星级评分,有时又没有。 这是因为没有为应用明确指定缺省路由时,Istio 会将请求随机路由到该服务的所有可用版本上。
此任务假定您尚未设置任何路由。 如果您已经为示例应用程序创建了存在冲突的路由规则,则需要在下面的命令中使用 replace
代替 create
。 请注意:本文档假设还没有设置任何路由规则。
首先将所有微服务的默认路由设置为 v1。
可以通过下面的命令来显示已创建的路由规则: