在使用寬鬆模式的流量泳道實施全鏈路流量管理之前,需要進行一些準備工作,以確保在開始執行後續情境中的具體步驟之前,已經滿足了所有必要的條件,從而避免遇到不必要的錯誤和障礙。本文介紹使用寬鬆模式流量泳道實施全鏈路流量管理前的一些準備工作。
前提條件
已經建立ASM企業版或旗艦版執行個體,且版本為1.18.2.111及以上。具體操作,請參見建立ASM執行個體或升級ASM執行個體。
已添加叢集到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-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開發,情境三中的樣本應用基於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,請參見Install 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版。