本页面介绍如何部署示例应用以演示 Anthos Service Mesh。如果您尚未安装 Anthos Service Mesh,请参阅安装指南部分,选择适合您的指南。
Anthos Service Mesh 安装附带了多个示例应用。本指南将引导您部署BookInfo示例。这是一个简单的模拟书店应用,由四项服务组成。这些服务提供了 Web 产品页面、图书详细信息、评论(有多个版本的评论服务)以及评分,且全部使用 Anthos Service Mesh 进行管理。您可以在 samples/bookinfo
的 Anthos Service Mesh 安装目录中找到此示例中使用的源代码和所有其他文件。
启用 Sidecar 自动注入功能
如需为示例应用启用自动 Sidecar 注入功能(自动注入),您必须向示例的命名空间添加修订版本标签。您添加的标签取决于您是部署了代管式 Anthos Service Mesh 还是安装了集群内控制层面。Sidecar 注入器 Webhook 会使用修订版本标签将注入的 Sidecar 与特定控制层面修订版本相关联。
集群内
使用以下命令查找
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-1106-2,istio=istiod,pod-template-hash=5788d57586 istiod-asm-173-3-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-1106-2,istio=istiod,pod-template-hash=5788d57586
在输出中的
LABELS
列下,记下istiod
修订版本标签的值,该值位于前缀istio.io/rev=
之后。在此示例中,该值为asm-1106-2
。将修订版本标签应用于默认命名空间。在以下命令中,
REVISION
是您在上一步中记下的istiod
修订版本标签的值。kubectl label namespace default istio-injection- istio.io/rev=REVISION --overwrite
您可以忽略输出中的
"istio-injection not found"
消息。这意味着命名空间之前没有istio-injection
标签,对于 Anthos Service Mesh 的新安装或新部署,这是预期现象。如果命名空间同时具有istio-injection
和修订版本标签,自动注入将失败,因此 Anthos Service Mesh 文档中的所有kubectl label
命令都包含移除istio-injection
标签。
代管式服务网格
将
asm-managed-rapid
修订版本标签应用于default
命名空间。kubectl label namespace default istio-injection- istio.io/rev=asm-managed-rapid --overwrite
此标签对应于 Anthos Service Mesh 版本当前托管的 Anthos Service Mesh 发布版本。
您可以忽略输出中的
"istio-injection not found"
消息。这意味着命名空间之前没有istio-injection
标签,对于 Anthos Service Mesh 的新安装或新部署,这是预期现象。如果命名空间同时具有istio-injection
和修订版本标签,自动注入将失败,因此 Anthos Service Mesh 文档中的所有kubectl label
命令都包含移除istio-injection
标签。如果您还部署了可选的 Google 管理的数据平面,请按如下方式为
demo
命名空间添加注释:kubectl annotate --overwrite namespace YOUR_NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
部署应用
现在,default
命名空间已启用自动注入功能,当您部署 BookInfo 应用的服务时,Sidecar 代理会与每项服务一起注入。
在安装 Anthos Service Mesh 的计算机上的命令行界面,转到 Anthos 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
验证应用部署
如需查看图书信息应用是否正常运行,您需要将流量发送到入站流量网关。
如果您在 GKE on VMware 上安装了 Anthos Service Mesh,请获取您在安装 Anthos Service Mesh 之后配置的入站流量网关的外部 IP 地址
如果您在 GKE 上安装了 Anthos 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
,则表示该应用与 Anthos Service Mesh 正常配合使用。如需查看 BookInfo 网页,请在浏览器中输入以下地址:
http://EXTERNAL_IP/productpage
如果您多次刷新该页面,您应该会看到产品页面中显示的不同版本的评论,以轮循方式呈现(红色星标、黑色星标、无星标)。
现在应用已在生成流量,接下来您可以在 Google Cloud 控制台中探索 Anthos 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