在使用宽松模式的流量泳道实施全链路流量管理之前,需要进行一些准备工作,以确保在开始执行后续场景中的具体步骤之前,已经满足了所有必要的条件,从而避免遇到不必要的错误和障碍。本文介绍使用宽松模式流量泳道实施全链路流量管理前的一些准备工作。
前提条件
已添加集群到ASM实例。具体操作,请参见添加集群到ASM实例。
已创建名称为ingressgateway的ASM网关。具体操作,请参见创建入口网关服务。
准备工作
创建ingressgateway网关规则
使用以下内容创建ingressgateway且命名空间为istio-system的网关规则。具体操作,请参见管理网关规则。
部署示例服务(适用于场景一、场景二)
为default命名空间启用Sidecar网格代理自动注入。具体操作,请参见启用自动注入。
关于自动注入的更多信息,请参见配置Sidecar注入策略。
在ACK集群中执行以下命令,部署示例服务。
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v1/mock-v1.yaml kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v2/mock-v2.yaml kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v3/mock-v3.yaml
说明场景一、场景二中的示例应用基于Golang开发,场景三中的示例应用基于Java开发。这是由于baggage透传机制对于服务采用的开发语言存在限制。更多信息,请参见Auto-instrumentation。
配置服务透传Baggage上下文(适用于场景三)
本节主要展示如何通过OpenTelemetry Operator自动插装的方法,为Kubernetes集群中的服务添加Baggage透传能力。
部署OpenTelemetry Operator。
通过kubectl连接到ASM实例添加的Kubernetes集群。执行以下命令,创建opentelemetry-operator-system命名空间。
kubectl create namespace opentelemetry-operator-system
执行以下命令,使用Helm在opentelemetry-operator-system命名空间下安装OpenTelemetry Operator。关于如何安装Helm,请参见安装Helm。
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts helm install \ --namespace=opentelemetry-operator-system \ --version=0.46.0 \ --set admissionWebhooks.certManager.enabled=false \ --set admissionWebhooks.certManager.autoGenerateCert=true \ --set manager.image.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/opentelemetry-operator" \ --set manager.image.tag="0.92.1" \ --set kubeRBACProxy.image.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/kube-rbac-proxy" \ --set kubeRBACProxy.image.tag="v0.13.1" \ --set manager.collectorImage.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/opentelemetry-collector" \ --set manager.collectorImage.tag="0.97.0" \ --set manager.opampBridgeImage.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/operator-opamp-bridge" \ --set manager.opampBridgeImage.tag="0.97.0" \ --set manager.targetAllocatorImage.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/target-allocator" \ --set manager.targetAllocatorImage.tag="0.97.0" \ --set manager.autoInstrumentationImage.java.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/autoinstrumentation-java" \ --set manager.autoInstrumentationImage.java.tag="1.32.1" \ --set manager.autoInstrumentationImage.nodejs.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/autoinstrumentation-nodejs" \ --set manager.autoInstrumentationImage.nodejs.tag="0.49.1" \ --set manager.autoInstrumentationImage.python.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/autoinstrumentation-python" \ --set manager.autoInstrumentationImage.python.tag="0.44b0" \ --set manager.autoInstrumentationImage.dotnet.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/autoinstrumentation-dotnet" \ --set manager.autoInstrumentationImage.dotnet.tag="1.2.0" \ --set manager.autoInstrumentationImage.go.repository="registry-cn-hangzhou.ack.aliyuncs.com/acs/opentelemetry-go-instrumentation" \ --set manager.autoInstrumentationImage.go.tag="v0.10.1.alpha-2-aliyun" \ opentelemetry-operator open-telemetry/opentelemetry-operator
执行以下命令,检查opentelemetry-operator是否正常运行。
kubectl get pod -n opentelemetry-operator-system
预期输出:
NAME READY STATUS RESTARTS AGE opentelemetry-operator-854fb558b5-pvllj 2/2 Running 0 1m
配置自动插装(auto-instrumentation)。
使用以下内容,创建instrumentation.yaml文件。
apiVersion: opentelemetry.io/v1alpha1 kind: Instrumentation metadata: name: demo-instrumentation spec: propagators: - baggage sampler: type: parentbased_traceidratio argument: "1"
执行以下命令,在default命名空间下声明自动插装。
kubectl apply -f instrumentation.yaml
说明对于OpenTelemetry框架来说,其最佳实践还包括部署OpenTelemetry Collector以收集可观测数据。由于本文主要演示OpenTelemetry自动插装实现的Baggage链路透传,因此没有包含部署OpenTelemetry Collector的步骤。有关服务网格ASM如何通过OpenTelemetry上报链路追踪数据,请参考见将链路追踪数据采集到阿里云可观测链路OpenTelemetry版。