ASM可以便捷地为部署在网格内的应用提供链路追踪能力,但要实现网格内和网格外应用的一体化追踪,需要使用可观测链路OpenTelemetry版以形成调用链。本文介绍如何通过阿里云可观测链路OpenTelemetry版,使网格外部应用调用网格内部应用并形成一个完整的链路追踪信息。
前提条件
已创建一个ASM实例,并已将ACK集群添加到ASM实例中。具体操作,请参见创建ASM实例和添加集群到ASM实例。
ASM实例已部署入口网关,便于访问网格内应用。具体操作,请参见创建入口网关。
已准备一个用于运行网格外示例应用的环境,并安装Python 2.7。
已启用阿里云可观测链路OpenTelemetry版。具体操作,请参见将链路追踪数据采集到阿里云可观测链路OpenTelemetry版。
使用说明
本示例将部署一个用Python编写的应用ExternalProxy。该应用会启用一个HTTP Server,当ExternalProxy的根路径被访问时,会调用网格内应用BookInfo的Productpage应用。
本示例将使用XTrace为追踪系统进行演示。若您使用自行部署的Zipkin兼容的追踪系统,可以将该系统上报地址暴露于网格外应用可以访问的地址,可以跳过步骤二:获取可观测链路OpenTelemetry版的接入点地址,直接参照步骤三:部署网格外应用ExternalProxy使用该地址作为上报地址即可。
步骤一:部署网格内应用BookInfo
执行以下命令,将Bookinfo应用部署到ASM实例的集群中。
BookInfo应用的YAML文件,请从GitHub下载。
kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} apply -f bookinfo.yaml
执行以下命令,部署Bookinfo应用的VirtualService。
VirtualService的YAML文件,请从GitHub下载。
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f virtual-service-all-v1.yaml
执行以下命令,部署Bookinfo应用的DestinationRule。
DestinationRule的YAML文件,请从Github下载。
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f destination-rule-all.yaml
执行以下命令,部署Bookinfo应用的Gateway。
Gateway的YAML文件,请从GitHub下载。
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f bookinfo-gateway.yaml
步骤二:获取可观测链路OpenTelemetry版的接入点地址
登录可观测链路OpenTelemetry版,在左侧导航栏,单击概览。
在概览页面,单击接入流程页签,然后单击查看接入点信息。
查看接入点地址。
在页面上方,选择目标地域。
请选择BookInfo应用部署的ACK集群所在地域来上报数据,否则追踪信息无法关联。
在接入点信息页签,打开显示Token开关,并根据您的ExternalProxy部署位置决定选择公网或私网接入点地址。
因为ExternalProxy通过Zipkin V1 API进行数据上报,因此选用V1版本的接入点地址。
步骤三:部署网格外应用ExternalProxy
Sidecar代理会将接收到的请求中的所有内容(包括HTTP头部、请求体等)转发给上游服务,因此链路追踪相关的Header也会被转发至上游。
为了完成链路追踪信息的透传,应用需要按照社区规范将链路追踪相关的请求Header透传至上游的请求。
将下面的代码保存至网格外应用运行环境,命名为ExternalProxy.py。
将
{XTRACE_ZIPKIN_V1_ENDPOINT}
替换为上一步获取到的接入点地址。如果您希望上报于自行部署的追踪系统,这里请替换为其上报地址。将
{INGRESS_GATE_WAY_IP}
替换为ACK集群Ingress Gateway的地址。
执行下面的命令,启动ExternalProxy。
python ExternalProxy.py
* Serving Flask app "main" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: on * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 317-792-686
执行以下命令,调用ExternalProxy。
curl localhost:5000
预期输出:
OK
步骤四:查看链路追踪信息
在左侧导航栏,单击应用列表,然后在上方选择地域,单击下方列表中的ExternalProxy。
在左侧导航栏,单击应用详情,单击调用链路页签,单击相应的traceId查看链路追踪信息。
可以看到,网格外部应用ExternalProxy与内部应用BookInfo之间已形成完整的调用链路。