部署图书信息示例
本页介绍了如何部署示例应用以演示 Cloud Service Mesh。如果您尚未安装 Cloud Service Mesh,请参阅安装指南。
Cloud Service Mesh 安装附带了多个示例应用。本指南将引导您部署 BookInfo 示例。这是一个简单的模拟书店应用,由四项服务组成。这些服务提供了 Web 产品页面、图书详细信息、评论(有多个版本的评论服务)以及评分,且全部使用 Cloud Service Mesh 进行管理。您可以在 samples/bookinfo
的 Cloud Service Mesh 安装目录中找到此示例中使用的源代码和所有其他文件。
启用 Sidecar 自动注入功能
如需启用边车自动注入,您必须标记您的命名空间,以便边车注入器网络钩子将注入的边车与特定控制平面修订版本相关联。如果您设置了默认标记,那么请使用默认注入标签标记您的命名空间。否则,请使用修订版本标签标记您的命名空间。此外,您添加的标签还取决于您是部署了代管式 Cloud Service Mesh,还是安装了集群内控制平面。
代管式
您可以使用默认注入标签或修订版本标签标记您的命名空间
默认注入标签
将默认注入标签应用于命名空间。
kubectl label namespace NAMESPACE istio-injection=enabled istio.io/rev-
修订版本标签
在部署应用之前,请从相应命名空间中移除任何以前的
istio-injection
标签,然后改为设置istio.io/rev=REVISION_LABEL
标签。如需将其更改为特定的修订版本标签,请点击
REVISION_LABEL
并将其替换为相应标签:asm-managed-rapid
(表示快速版本)、asm-managed
(表示标准版本)或asm-managed-stable
(表示稳定版本)。修订版本标签对应于发布渠道:
修订版本标签 渠道 asm-managed
普通 asm-managed-rapid
快速 asm-managed-stable
稳定版 kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION_LABEL --overwrite
如果您还部署了可选的代管式数据平面,请按如下所示为
NAMESPACE
命名空间添加注解:kubectl annotate --overwrite namespace NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
集群内
使用以下命令查找
istiod
的标签:kubectl -n istio-system get pods -l app=istiod --show-labels
输出类似于以下内容:
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-173-3-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-11910-9,istio=istiod,pod-template-hash=5788d57586 istiod-asm-173-3-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-11910-9,istio=istiod,pod-template-hash=5788d57586
在输出中的
LABELS
列下,记下istiod
修订版本标签的值,该值位于前缀istio.io/rev=
之后。在此示例中,该值为asm-11910-9
。将修订版本标签应用于默认命名空间。在以下命令中,
REVISION
是您在上一步中记下的istiod
修订版本标签的值。kubectl label namespace default istio-injection- istio.io/rev=REVISION --overwrite
您可以忽略输出中的
"istio-injection not found"
消息。这意味着命名空间之前没有istio-injection
标签,对于 Cloud Service Mesh 的新安装或新部署,这是预期现象。如果命名空间同时具有istio-injection
和修订版本标签,自动注入行为未定义,因此 Cloud Service Mesh 文档中的所有kubectl label
命令都会明确确保仅设置一个标签。
部署应用
现在,default
命名空间已启用自动注入功能,当您部署 BookInfo 应用的服务时,Sidecar 代理会与每项服务一起注入。
在安装了 Cloud Service Mesh 的计算机的命令行上,转到 Cloud Service Mesh 安装目录的根目录。如果需要,请下载安装文件。
使用
kubectl
将应用部署到默认命名空间:kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
通过运行以下命令确认是否已正确部署应用:
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 pod
输出:
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
最后,为应用定义入站流量网关路由:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
输出:
gateway.networking.istio.io/bookinfo-gateway created virtualservice.networking.istio.io/bookinfo created
验证应用部署
如需查看图书信息应用是否正常运行,您需要将流量发送到入站流量网关。
如果您在 Google Distributed Cloud 上安装了 Cloud Service Mesh,请获取您在安装 Cloud Service Mesh 之后配置的入站流量网关的外部 IP 地址
如果您在 GKE 上安装了 Cloud Service Mesh,请按如下所示方式获取入站流量网关的外部 IP 地址:
kubectl get service istio-ingressgateway -n istio-system
输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway LoadBalancer 10.19.247.233 35.239.7.64 80:31380/TCP,443:31390/TCP,31400:31400/TCP 27m
在此示例中,入站流量服务的 IP 地址为
35.239.7.64
。
试用应用
使用
curl
来检查 BookInfo 应用是否在运行:curl -I http://EXTERNAL_IP/productpage
如果响应显示
200
,则表示该应用与 Cloud Service Mesh 正常配合使用。如需查看 BookInfo 网页,请在浏览器中输入以下地址:
http://EXTERNAL_IP/productpage
如果您多次刷新该页面,您应该会看到产品页面中显示的不同版本的评论,以轮询方式呈现(红色星标、黑色星标、无星标)。
现在应用已在生成流量,接下来您可以在 Google Cloud 控制台中探索 Cloud Service Mesh 页面,以了解指标和其他可观测性功能。
清理
试用完 Bookinfo 示例后,请将其从集群中移除。
使用以下脚本卸载 Bookinfo:
samples/bookinfo/platform/kube/cleanup.sh
确认关停:
kubectl get virtualservices #-- there should be no virtual services kubectl get destinationrules #-- there should be no destination rules kubectl get gateway #-- there should be no gateway kubectl get pods #-- the Bookinfo pods should be deleted