3.2. 对象存储设置


在设置受支持的对象存储时,您可以使用以下配置参数。

重要

使用对象存储需要在部署 TempoStackTempoMonolithic 实例前设置受支持的对象存储并为对象存储凭据创建一个 secret。

表 3.1. 所需的 secret 参数
存储供应商

Secret 参数

Red Hat OpenShift Data Foundation

name: tempostack-dev-odf # example

bucket: <bucket_name> # requires an ObjectBucketClaim

endpoint: https://s3.openshift-storage.svc

access_key_id: <data_foundation_access_key_id>

access_key_secret: <data_foundation_access_key_secret>

MinIO

请参阅 MinIO Operator

name: tempostack-dev-minio # example

bucket: <minio_bucket_name> # MinIO documentation

endpoint: <minio_bucket_endpoint>

access_key_id: <minio_access_key_id>

access_key_secret: <minio_access_key_secret>

Amazon S3

name: tempostack-dev-s3 # example

bucket: <s3_bucket_name> # Amazon S3 documentation

endpoint: <s3_bucket_endpoint>

access_key_id: <s3_access_key_id>

access_key_secret: <s3_access_key_secret>

带有安全令牌服务(STS)的 Amazon S3

name: tempostack-dev-s3 # example

bucket: <s3_bucket_name> # Amazon S3 documentation

region: <s3_region>

role_arn: <s3_role_arn>

Microsoft Azure Blob Storage

name: tempostack-dev-azure # example

container: <azure_blob_storage_container_name> # Microsoft Azure documentation

account_name: <azure_blob_storage_account_name>

account_key: <azure_blob_storage_account_key>

Google Cloud Storage on Google Cloud Platform (GCP)

name: tempostack-dev-gcs # example

bucketname: <google_cloud_storage_bucket_name> # requires a bucket created in a GCP project

key.json: <path/to/key.json> # requires a service account in the bucket’s GCP project for GCP authentication

3.2.1. 使用安全令牌服务设置 Amazon S3 存储

您可以使用安全令牌服务(STS)和 AWS 命令行界面(AWS CLI)设置 Amazon S3 存储。另外,您还可以使用 Cloud Credential Operator (CCO)。

重要

将分布式 Tracing Platform 与 Amazon S3 存储和 STS 一起使用只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

先决条件

  • 已安装 AWS CLI 的最新版本。
  • 如果要使用 CCO,已在集群中安装并配置了 CCO。

流程

  1. 创建 AWS S3 存储桶。
  2. 为 AWS Identity and Access Management (AWS IAM)策略创建以下 trust.json 文件,用于设置 AWS IAM 角色之间的信任关系,您要在下一步中创建的,以及 TempoStackTempoMonolithic 实例的服务帐户:

    trust.json

    {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Federated": "arn:aws:iam::<aws_account_id>:oidc-provider/<oidc_provider>" 
    1
    
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
              "StringEquals": {
                "<oidc_provider>:sub": [
                  "system:serviceaccount:<openshift_project_for_tempo>:tempo-<tempo_custom_resource_name>" 
    2
    
                  "system:serviceaccount:<openshift_project_for_tempo>:tempo-<tempo_custom_resource_name>-query-frontend"
               ]
             }
           }
         }
        ]
    }
    Copy to Clipboard

    1
    在 OpenShift Container Platform 上配置的 OpenID Connect (OIDC)供应商。
    2
    您要在其中创建 TempoStackTempoMonolithic 实例的命名空间。将 <tempo_custom_resource_name & gt; 替换为您在 TempoStackTempoMonolithic 自定义资源中定义的元数据名称。
    提示

    您还可以运行以下命令来获取 OIDC 供应商的值:

    $ oc get authentication cluster -o json | jq -r '.spec.serviceAccountIssuer' | sed 's~http[s]*://~~g'
    Copy to Clipboard
  3. 通过附加创建的 trust.json 策略文件来创建 AWS IAM 角色。您可以运行以下命令来完成此操作:

    $ aws iam create-role \
          --role-name "tempo-s3-access" \
          --assume-role-policy-document "file:///tmp/trust.json" \
          --query Role.Arn \
          --output text
    Copy to Clipboard
  4. 将 AWS IAM 策略附加到创建的 AWS IAM 角色。您可以运行以下命令来完成此操作:

    $ aws iam attach-role-policy \
          --role-name "tempo-s3-access" \
          --policy-arn "arn:aws:iam::aws:policy/AmazonS3FullAccess"
    Copy to Clipboard
  5. 如果不使用 CCO,请跳过这一步。如果使用 CCO,请为 Tempo Operator 配置云供应商环境。您可以运行以下命令来完成此操作:

    $ oc patch subscription <tempo_operator_sub> \ 
    1
    
              -n <tempo_operator_namespace> \ 
    2
    
              --type='merge' -p '{"spec": {"config": {"env": [{"name": "ROLEARN", "value": "'"<role_arn>"'"}]}}}' 
    3
    Copy to Clipboard
    1
    Tempo Operator 订阅的名称。
    2
    Tempo Operator 的命名空间。
    3
    AWS STS 需要将 ROLEARN 环境变量添加到 Tempo Operator 子系统中。作为 & lt;role_arn > 值,添加在第 3 步中创建的 AWS IAM 角色的 Amazon Resource Name (ARN)。
  6. 在 OpenShift Container Platform 中,使用键创建一个对象存储 secret,如下所示:

    apiVersion: v1
    kind: Secret
    metadata:
      name: <secret_name>
    stringData:
      bucket: <s3_bucket_name>
      region: <s3_region>
      role_arn: <s3_role_arn>
    type: Opaque
    Copy to Clipboard
  7. 创建对象存储 secret 时,按如下所示更新分布式 Tracing Platform 实例的相关自定义资源:

    TempoStack 自定义资源示例

    apiVersion: tempo.grafana.com/v1alpha1
    kind: TempoStack
    metadata:
      name: <name>
      namespace: <namespace>
    spec:
    # ...
      storage:
        secret: 
    1
    
          name: <secret_name>
          type: s3
          credentialMode: token-cco 
    2
    
    # ...
    Copy to Clipboard

    1
    上一步中创建的 secret。
    2
    如果不使用 CCO,请省略这一行。如果使用 CCO,请使用 token-cco 值添加此参数。

    TempoMonolithic 自定义资源示例

    apiVersion: tempo.grafana.com/v1alpha1
    kind: TempoMonolithic
    metadata:
      name: <name>
      namespace: <namespace>
    spec:
    # ...
      storage:
        traces:
          backend: s3
          s3:
            secret: <secret_name> 
    1
    
            credentialMode: token-cco 
    2
    
    # ...
    Copy to Clipboard

    1
    上一步中创建的 secret。
    2
    如果不使用 CCO,请省略这一行。如果使用 CCO,请使用 token-cco 值添加此参数。

3.2.2. 使用安全令牌服务设置 Azure 存储

您可以使用 Azure 命令行界面(Azure CLI)使用安全令牌服务(STS)设置 Azure 存储。

重要

使用带有 Azure 存储和 STS 的分布式跟踪平台只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

先决条件

  • 已安装 Azure CLI 的最新版本。
  • 您已创建了 Azure 存储帐户。
  • 您已创建了 Azure blob 存储容器。

流程

  1. 运行以下命令来创建 Azure 管理的身份:

    $ az identity create \
      --name <identity_name> \ 
    1
    
      --resource-group <resource_group> \ 
    2
    
      --location <region> \ 
    3
    
      --subscription <subscription_id> 
    4
    Copy to Clipboard
    1
    为受管身份选择的名称。
    2
    您要创建身份的 Azure 资源组。
    3
    Azure 区域,它必须与资源组相同。
    4
    Azure 订阅 ID。
  2. 为 OpenShift Container Platform 服务帐户创建一个联邦身份凭证,供分布式 Trac Platform 的所有组件使用,但 Query Frontend 除外。您可以运行以下命令来完成此操作:

    $ az identity federated-credential create \ 
    1
    
      --name <credential_name> \ 
    2
    
      --identity-name <identity_name> \
      --resource-group <resource_group> \
      --issuer <oidc_provider> \ 
    3
    
      --subject <tempo_service_account_subject> \ 
    4
    
      --audiences <audience> 
    5
    Copy to Clipboard
    1
    联邦身份凭证允许 OpenShift Container Platform 服务帐户作为 Azure 管理的身份进行身份验证,而无需存储 secret 或使用 Azure 服务主体身份。
    2
    为联邦凭证选择的名称。
    3
    集群的 OpenID Connect (OIDC)供应商的 URL。
    4
    集群的服务帐户主题,格式为: system:serviceaccount:<namespace>:tempo-<tempostack_instance_name >。
    5
    预期的 audience,用于验证为联邦身份凭证发布的令牌。这通常设置为 api://AzureADTokenExchange
    提示

    您可以运行以下命令来获取集群的 OpenID Connect (OIDC)签发者的 URL:

    $ oc get authentication cluster -o json | jq -r .spec.serviceAccountIssuer
    Copy to Clipboard
  3. 为 OpenShift Container Platform 服务帐户创建一个联邦身份凭证,供分布式平台的 Query Frontend 组件使用。您可以运行以下命令来完成此操作:

    $ az identity federated-credential create \ 
    1
    
      --name <credential_name>-frontend \ 
    2
    
      --identity-name <identity_name> \
      --resource-group <resource_group> \
      --issuer <cluster_issuer> \
      --subject <tempo_service_account_query_frontend_subject> \ 
    3
    
      --audiences <audience> | jq
    Copy to Clipboard
    1
    联邦身份凭证允许 OpenShift Container Platform 服务帐户作为 Azure 管理的身份进行身份验证,而无需存储 secret 或使用 Azure 服务主体身份。
    2
    为 frontend federated 身份凭证选择的名称。
    3
    集群的服务帐户主题,格式为: system:serviceaccount:<namespace>:tempo-<tempostack_instance_name >。
  4. 将 Storage Blob Data Contributor 角色分配给创建的 Azure 管理身份的 Azure 服务主体身份。您可以运行以下命令来完成此操作:

    $ az role assignment create \
      --assignee <assignee_name> \ 
    1
    
      --role "Storage Blob Data Contributor" \
      --scope "/subscriptions/<subscription_id>
    Copy to Clipboard
    1
    您在第 1 步中创建的 Azure 管理身份的 Azure 服务主体身份。
    提示

    您可以运行以下命令来获取 &lt ;assignee_name > 值:

    $ az ad sp list --all --filter "servicePrincipalType eq 'ManagedIdentity'" | jq -r --arg idName <identity_name> '.[] | select(.displayName == $idName) | .appId'`
    Copy to Clipboard
  5. 获取您在第 1 步中创建的 Azure 管理身份的客户端 ID:

    CLIENT_ID=$(az identity show \
      --name <identity_name> \ 
    1
    
      --resource-group <resource_group> \ 
    2
    
      --query clientId \
      -o tsv)
    Copy to Clipboard
    1
    复制并粘贴第 1 步中的 <identity_name > 值。
    2
    复制并粘贴第 1 步中的 <resource_group > 值。
  6. 为 Azure 工作负载身份联邦(WIF)创建 OpenShift Container Platform secret。您可以运行以下命令来完成此操作:

    $ oc create -n <tempo_namespace> secret generic azure-secret \
      --from-literal=container=<azure_storage_azure_container> \ 
    1
    
      --from-literal=account_name=<azure_storage_azure_accountname> \ 
    2
    
      --from-literal=client_id=<client_id> \ 
    3
    
      --from-literal=audience=<audience> \ 
    4
    
      --from-literal=tenant_id=<tenant_id> 
    5
    Copy to Clipboard
    1
    Azure Blob Storage 容器的名称。
    2
    Azure Storage 帐户的名称。
    3
    您在上一步中获取的受管身份的客户端 ID。
    4
    可选:默认为 api://AzureADTokenExchange
    5
    Azure 租户 ID。
  7. 创建对象存储 secret 时,按如下所示更新分布式 Tracing Platform 实例的相关自定义资源:

    TempoStack 自定义资源示例

    apiVersion: tempo.grafana.com/v1alpha1
    kind: TempoStack
    metadata:
      name: <name>
      namespace: <namespace>
    spec:
    # ...
      storage:
        secret: 
    1
    
          name: <secret_name>
          type: azure
    # ...
    Copy to Clipboard

    1
    上一步中创建的 secret。

    TempoMonolithic 自定义资源示例

    apiVersion: tempo.grafana.com/v1alpha1
    kind: TempoMonolithic
    metadata:
      name: <name>
      namespace: <namespace>
    spec:
    # ...
      storage:
        traces:
          backend: azure
          azure:
            secret: <secret_name> 
    1
    
    # ...
    Copy to Clipboard

    1
    上一步中创建的 secret。

3.2.3. 使用安全令牌服务设置 Google Cloud 存储

您可以使用 Google Cloud CLI 使用安全令牌服务(STS)设置 Google Cloud Storage (GCS)。

重要

使用带有 GCS 和 STS 的分布式跟踪平台只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

先决条件

  • 已安装 Google Cloud CLI 的最新版本。

流程

  1. 在 Google Cloud Platform (GCP)上创建 GCS 存储桶。
  2. 使用 Google Identity and Access Management (IAM)创建或重复使用服务帐户:

    SERVICE_ACCOUNT_EMAIL=$(gcloud iam service-accounts create <iam_service_account_name> \ 
    1
    
        --display-name="Tempo Account" \
        --project <project_id>  \ 
    2
    
        --format='value(email)' \
        --quiet)
    Copy to Clipboard
    1
    GCP 上服务帐户的名称。
    2
    GCP 上服务帐户的项目 ID。
  3. 将所需的 GCP 角色绑定到项目级别创建的服务帐户。您可以运行以下命令来完成此操作:

    $ gcloud projects add-iam-policy-binding <project_id> \
        --member "serviceAccount:$SERVICE_ACCOUNT_EMAIL" \
        --role "roles/storage.objectAdmin"
    Copy to Clipboard
  4. 检索与集群关联的 Google Cloud Workload Identity Pool 的 POOL_ID 值。您可以如何检索这个值取决于您的环境,因此命令只是示例:

    $ OIDC_ISSUER=$(oc get authentication.config cluster -o jsonpath='{.spec.serviceAccountIssuer}') \
    &&
      POOL_ID=$(echo "$OIDC_ISSUER" | awk -F'/' '{print $NF}' | sed 's/-oidc$//')
    Copy to Clipboard
  5. 添加 IAM 策略绑定。您可以运行以下命令来完成此操作:

    $ gcloud iam service-accounts add-iam-policy-binding "$SERVICE_ACCOUNT_EMAIL" \ 
    1
    
      --role="roles/iam.workloadIdentityUser" \
      --member="principal://iam.googleapis.com/projects/<project_number>/locations/global/workloadIdentityPools/<pool_id>/subject/system:serviceaccount:<tempo_namespace>:tempo-<tempo_name>" \
      --project=<project_id> \
      --quiet \
    &&
      gcloud iam service-accounts add-iam-policy-binding "$SERVICE_ACCOUNT_EMAIL" \
      --role="roles/iam.workloadIdentityUser" \
      --member="principal://iam.googleapis.com/projects/<project_number>/locations/global/workloadIdentityPools/<pool_id>/subject/system:serviceaccount:<tempo_namespace>:tempo-<tempo_name>-query-frontend" \
      --project=<project_id> \
      --quiet
    &&
      gcloud storage buckets add-iam-policy-binding "gs://$BUCKET_NAME" \
      --role="roles/storage.admin" \
      --member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \
      --condition=None
    Copy to Clipboard
    1
    $SERVICE_ACCOUNT_EMAIL 是第 2 步中的命令的输出。
  6. 为 storage secret 的 key.json 密钥创建一个凭据文件,供 TempoStack 自定义资源使用。您可以运行以下命令来完成此操作:

    $ gcloud iam workload-identity-pools create-cred-config \
        "projects/<project_number>/locations/global/workloadIdentityPools/<pool_id>/providers/<provider_id>" \
        --service-account="$SERVICE_ACCOUNT_EMAIL" \
        --credential-source-file=/var/run/secrets/storage/serviceaccount/token \ 
    1
    
        --credential-source-type=text \
        --output-file=<output_file_path> 
    2
    Copy to Clipboard
    1
    credential-source-file 参数必须始终指向 /var/run/secrets/storage/serviceaccount/token 路径,因为 Operator 从这个路径挂载令牌。
    2
    保存输出文件的路径。
  7. 运行以下命令来获取正确的受众:

    $ gcloud iam workload-identity-pools providers describe "$PROVIDER_NAME" --format='value(oidc.allowedAudiences[0])'
    Copy to Clipboard
  8. 运行以下命令,为分布式 Tracing Platform 创建存储 secret。

    $ oc -n <tempo_namespace> create secret generic gcs-secret \
      --from-literal=bucketname="<bucket_name>" \ 
    1
    
      --from-literal=audience="<audience>" \      
    2
    
      --from-file=key.json=<output_file_path>    
    3
    Copy to Clipboard
    1
    Google Cloud Storage 的存储桶名称。
    2
    您在上一步获得的受众。
    3
    您在第 6 步中创建的凭据文件。
  9. 创建对象存储 secret 时,按如下所示更新分布式 Tracing Platform 实例的相关自定义资源:

    TempoStack 自定义资源示例

    apiVersion: tempo.grafana.com/v1alpha1
    kind: TempoStack
    metadata:
      name: <name>
      namespace: <namespace>
    spec:
    # ...
      storage:
        secret: 
    1
    
          name: <secret_name>
          type: gcs
    # ...
    Copy to Clipboard

    1
    上一步中创建的 secret。

    TempoMonolithic 自定义资源示例

    apiVersion: tempo.grafana.com/v1alpha1
    kind: TempoMonolithic
    metadata:
      name: <name>
      namespace: <namespace>
    spec:
    # ...
      storage:
        traces:
          backend: gcs
          gcs:
            secret: <secret_name> 
    1
    
    # ...
    Copy to Clipboard

    1
    上一步中创建的 secret。

3.2.4. 设置 IBM Cloud Object Storage

您可以使用 OpenShift CLI (oc) 设置 IBM Cloud Object Storage。

先决条件

  • 已安装最新版本的 OpenShift CLI (oc)。如需更多信息,请参阅配置:CLI 工具中的"使用 OpenShift CLI 入门"。
  • 已安装最新版本的 IBM Cloud Command Line Interface (ibmcloud)。如需更多信息,请参阅 IBM Cloud Docs 中的"开始使用 IBM Cloud CLI"。
  • 您已配置了 IBM Cloud Object Storage。如需更多信息,请参阅 IBM Cloud Docs 中的"删除计划并创建实例"。

    • 您有一个 IBM Cloud Platform 帐户。
    • 您已订购了一个 IBM Cloud Object Storage 计划。
    • 您已创建了 IBM Cloud Object Storage 实例。

流程

  1. 在 IBM Cloud 上,创建一个对象存储存储桶。
  2. 在 IBM Cloud 中,运行以下命令来创建用于连接到对象存储存储桶的服务密钥:

    $ ibmcloud resource service-key-create <tempo_bucket> Writer \
      --instance-name <tempo_bucket> --parameters '{"HMAC":true}'
    Copy to Clipboard
  3. 在 IBM Cloud 中,运行以下命令来使用存储桶凭证创建 secret:

    $ oc -n <namespace> create secret generic <ibm_cos_secret> \
      --from-literal=bucket="<tempo_bucket>" \
      --from-literal=endpoint="<ibm_bucket_endpoint>" \
      --from-literal=access_key_id="<ibm_bucket_access_key>" \
      --from-literal=access_key_secret="<ibm_bucket_secret_key>"
    Copy to Clipboard
  4. 在 OpenShift Container Platform 中,使用键创建一个对象存储 secret,如下所示:

    apiVersion: v1
    kind: Secret
    metadata:
      name: <ibm_cos_secret>
    stringData:
      bucket: <tempo_bucket>
      endpoint: <ibm_bucket_endpoint>
      access_key_id: <ibm_bucket_access_key>
      access_key_secret: <ibm_bucket_secret_key>
    type: Opaque
    Copy to Clipboard
  5. 在 OpenShift Container Platform 中,设置 TempoStack 自定义资源中的 storage 部分,如下所示:

    apiVersion: tempo.grafana.com/v1alpha1
    kind: TempoStack
    # ...
    spec:
    # ...
      storage:
        secret:
          name: <ibm_cos_secret> 
    1
    
          type: s3
    # ...
    Copy to Clipboard
    1
    包含 IBM Cloud Storage 访问和 secret 密钥的 secret 名称。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat