寬松模式流量泳道實施前的準備
在使用寬松模式的流量泳道實施全鏈路流量管理之前,需要進行一些準備工作,以確保在開始執(zhí)行后續(xù)場景中的具體步驟之前,已經(jīng)滿足了所有必要的條件,從而避免遇到不必要的錯誤和障礙。本文介紹使用寬松模式流量泳道實施全鏈路流量管理前的一些準備工作。
前提條件
已經(jīng)創(chuàng)建ASM企業(yè)版或旗艦版實例,且版本為1.18.2.111及以上。具體操作,請參見創(chuàng)建ASM實例或升級ASM實例。
已添加集群到ASM實例。具體操作,請參見添加集群到ASM實例。
已創(chuàng)建名稱為ingressgateway的ASM網(wǎng)關(guān)。具體操作,請參見創(chuàng)建入口網(wǎng)關(guān)服務。
準備工作
創(chuàng)建ingressgateway網(wǎng)關(guān)規(guī)則
使用以下內(nèi)容創(chuàng)建ingressgateway且命名空間為istio-system的網(wǎng)關(guān)規(guī)則。具體操作,請參見管理網(wǎng)關(guān)規(guī)則。
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: ingressgateway
namespace: istio-system
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- '*'
部署示例服務(適用于場景一、場景二)
為default命名空間啟用Sidecar網(wǎng)格代理自動注入。具體操作,請參見啟用自動注入。
關(guān)于自動注入的更多信息,請參見配置Sidecar注入策略。
在ACK集群中執(zhí)行以下命令,部署示例服務。
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v1/mock-tracing-v1.yaml kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v2/mock-tracing-v2.yaml kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v3/mock-tracing-v3.yaml
說明場景一、場景二中的示例應用基于Golang開發(fā),場景三中的示例應用基于Java開發(fā)。這是由于baggage透傳機制對于服務采用的開發(fā)語言存在限制。更多信息,請參見Auto-instrumentation。
配置服務透傳Baggage上下文(適用于場景三)
本節(jié)主要展示如何通過OpenTelemetry Operator自動插裝的方法,為Kubernetes集群中的服務添加Baggage透傳能力。
部署OpenTelemetry Operator。
通過kubectl連接到ASM實例添加的Kubernetes集群。執(zhí)行以下命令,創(chuàng)建opentelemetry-operator-system命名空間。
kubectl create namespace opentelemetry-operator-system
執(zhí)行以下命令,使用Helm在opentelemetry-operator-system命名空間下安裝OpenTelemetry Operator。關(guān)于如何安裝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
執(zhí)行以下命令,檢查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)。
使用以下內(nèi)容,創(chuàng)建instrumentation.yaml文件。
apiVersion: opentelemetry.io/v1alpha1 kind: Instrumentation metadata: name: demo-instrumentation spec: propagators: - baggage sampler: type: parentbased_traceidratio argument: "1"
執(zhí)行以下命令,在default命名空間下聲明自動插裝。
kubectl apply -f instrumentation.yaml
說明對于OpenTelemetry框架來說,其最佳實踐還包括部署OpenTelemetry Collector以收集可觀測數(shù)據(jù)。由于本文主要演示OpenTelemetry自動插裝實現(xiàn)的Baggage鏈路透傳,因此沒有包含部署OpenTelemetry Collector的步驟。有關(guān)服務網(wǎng)格ASM如何通過OpenTelemetry上報鏈路追蹤數(shù)據(jù),請參考見將鏈路追蹤數(shù)據(jù)采集到阿里云可觀測鏈路OpenTelemetry版。