部署图书信息示例
本页介绍了如何部署示例应用以演示 Cloud Service Mesh。如果您尚未开始使用 Cloud Service Mesh,请参阅新手入门指南。
Cloud Service Mesh 安装附带了多个示例应用。本指南将引导您部署 BookInfo 示例。这是一个简单的模拟书店应用,由四项服务组成。这些服务提供了 Web 产品页面、图书详细信息、评论(有多个版本的评论服务)以及评分,且全部使用 Cloud Service Mesh 进行管理。您可以在 samples/bookinfo
的 Cloud Service Mesh 安装目录中找到此示例中使用的源代码和所有其他文件。
启用 Sidecar 自动注入功能
启用用于注入的命名空间。具体步骤取决于您的控制平面实现。
受管理 (TD)
- 将默认注入标签应用于命名空间:
kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwrite
受管理(Istiod)
推荐:运行以下命令可将默认注入标签应用于命名空间:
kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwrite
如果您是使用托管式 Istiod 控制平面的现有用户:我们建议您使用默认注入,但也支持基于修订版本的注入。请按照以下说明操作:
运行以下命令以查找可用的发布渠道:
kubectl -n istio-system get controlplanerevision
输出类似于以下内容:
NAME AGE asm-managed-rapid 6d7h
注意:如果上述列表中显示了两个控制平面修订版本,请移除其中一个。不支持在集群中使用多个控制平面渠道。
在输出中,
NAME
列的值是与 Cloud Service Mesh 版本可用的发布版本对应的修订版本标签。将修订版本标签应用于命名空间:
kubectl label namespace default \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
集群内
推荐:运行以下命令可将默认注入标签应用于命名空间:
kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwrite
我们建议您使用默认注入,但也支持基于修订版本的注入:请按照以下说明操作:
使用以下命令查找
istiod
的修订版本标签:kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
将修订版本标签应用于命名空间。在以下命令中,
REVISION_LABEL
是您在上一步中记下的istiod
修订版本标签的值。kubectl label namespace default \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
部署应用
现在,default
命名空间已启用自动注入功能,当您部署 BookInfo 应用的服务时,Sidecar 代理会与每项服务一起注入。
在安装了 Cloud Service Mesh 的计算机的命令行上,转到 Cloud Service Mesh 安装目录的根目录。如果需要,请下载集群内安装文件(其中包含 BookInfo 示例应用),并将其解压缩。
使用
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 for VMware(纯软件)上安装了 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