全部產品
Search
文件中心

Alibaba Cloud Service Mesh:寬鬆模式流量泳道實施前的準備

更新時間:Dec 27, 2024

在使用寬鬆模式的流量泳道實施全鏈路流量管理之前,需要進行一些準備工作,以確保在開始執行後續情境中的具體步驟之前,已經滿足了所有必要的條件,從而避免遇到不必要的錯誤和障礙。本文介紹使用寬鬆模式流量泳道實施全鏈路流量管理前的一些準備工作。

前提條件

準備工作

建立ingressgateway網關規則

使用以下內容建立ingressgateway且命名空間為istio-system的網關規則。具體操作,請參見管理網關規則

展開查看網關規則YAML樣本

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:
        - '*'

部署樣本服務(適用於情境一情境二

  1. 為default命名空間啟用Sidecar網格代理自動注入。具體操作,請參見啟用自動注入

    關於自動注入的更多資訊,請參見配置Sidecar注入策略

  2. 在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透傳能力。

  1. 部署OpenTelemetry Operator。

    1. 通過kubectl串連到ASM執行個體添加的Kubernetes叢集。執行以下命令,建立opentelemetry-operator-system命名空間。

      kubectl create namespace opentelemetry-operator-system
    2. 執行以下命令,使用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
    3. 執行以下命令,檢查opentelemetry-operator是否正常運行。

      kubectl get pod -n opentelemetry-operator-system

      預期輸出:

      NAME                                      READY   STATUS    RESTARTS   AGE
      opentelemetry-operator-854fb558b5-pvllj   2/2     Running   0          1m
  2. 配置自動插裝(auto-instrumentation)。

    1. 使用以下內容,建立instrumentation.yaml檔案。

      重要

      未部署OpenTelemetry collector的自動插裝配置未開啟指標採集和鏈路追蹤,若您已經部署了OpenTelemetry collector,並且希望上報指標採集和鏈路追蹤資料,請參考已部署OpenTelemetry collector的自動插裝配置。

      未部署OpenTelemetry collector

      apiVersion: opentelemetry.io/v1alpha1
      kind: Instrumentation
      metadata:
        name: demo-instrumentation
      spec:
        env:
        - name: OTEL_METRICS_EXPORTER
          value: none
        propagators:
        - baggage
        sampler:
          argument: "1"
          type: always_off

      已部署OpenTelemetry collector

      apiVersion: opentelemetry.io/v1alpha1
      kind: Instrumentation
      metadata:
        name: demo-instrumentation
      spec:
        propagators:
          - baggage
        sampler:
          type: parentbased_traceidratio
          argument: "1"
    2. 執行以下命令,在default命名空間下聲明自動插裝。

      kubectl apply -f instrumentation.yaml
      說明

      對於OpenTelemetry架構來說,其最佳實務還包括部署OpenTelemetry Collector以收集可觀測資料。由於本文主要示範OpenTelemetry自動插裝實現的Baggage鏈路透傳,因此沒有包含部署OpenTelemetry Collector的步驟。有關服務網格ASM如何通過OpenTelemetry上報鏈路追蹤資料,請參考見將鏈路追蹤資料擷取到阿里雲可觀測鏈路OpenTelemetry版