3.2. 对象存储设置
在设置受支持的对象存储时,您可以使用以下配置参数。
使用对象存储需要在部署 TempoStack 或 TempoMonolithic 实例前设置受支持的对象存储并为对象存储凭据创建一个 secret。
| 存储供应商 |
|---|
| Secret 参数 |
|
|
| MinIO |
| 请参阅 MinIO Operator。
|
| Amazon S3 |
|
|
| 带有安全令牌服务(STS)的 Amazon S3 |
|
|
| Microsoft Azure Blob Storage |
|
|
| Google Cloud Storage on Google Cloud Platform (GCP) |
|
|
3.2.1. 使用安全令牌服务设置 Amazon S3 存储 复制链接链接已复制到粘贴板!
您可以使用安全令牌服务 (STS) 和 AWS 命令行界面(AWS CLI) 设置 Amazon S3 存储。另外,您还可以使用 Cloud Credential Operator (CCO)。
将 Distributed Tracing Platform 与 Amazon S3 存储和 STS 一起使用只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
先决条件
- 已安装 AWS CLI 的最新版本。
- 如果要使用 CCO,已在集群中安装并配置了 CCO。
流程
- 创建 AWS S3 存储桶。
为 AWS Identity and Access Management (AWS IAM) 策略创建以下
trust.json文件,用于设置 AWS IAM 角色之间的信任关系,您要在下一步中创建的,以及TempoStack或TempoMonolithic实例的服务帐户: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" ] } } } ] }提示您还可以运行以下命令来获取 OIDC 供应商的值:
$ oc get authentication cluster -o json | jq -r '.spec.serviceAccountIssuer' | sed 's~http[s]*://~~g'通过附加创建的
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将 AWS IAM 策略附加到创建的 AWS IAM 角色。您可以运行以下命令来完成此操作:
$ aws iam attach-role-policy \ --role-name "tempo-s3-access" \ --policy-arn "arn:aws:iam::aws:policy/AmazonS3FullAccess"如果不使用 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 在 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创建对象存储 secret 时,按如下所示 Distributed 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-cco2 # ...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-cco2 # ...
3.2.2. 使用安全令牌服务设置 Azure 存储 复制链接链接已复制到粘贴板!
您可以使用 Azure 命令行界面 (Azure CLI) 使用安全令牌服务 (STS) 设置 Azure 存储。
将 Distributed Tracing Platform 与 Azure 存储和 STS 一起使用只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
先决条件
- 已安装 Azure CLI 的最新版本。
- 您已创建了 Azure 存储帐户。
- 您已创建了 Azure blob 存储容器。
流程
运行以下命令来创建 Azure 管理的身份:
$ az identity create \ --name <identity_name> \1 --resource-group <resource_group> \2 --location <region> \3 --subscription <subscription_id>4 为 OpenShift Container Platform 服务帐户创建一个联邦身份凭证,供 Distributed Tracing 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 提示您可以运行以下命令来获取集群的 OpenID Connect (OIDC) 签发者的 URL:
$ oc get authentication cluster -o json | jq -r .spec.serviceAccountIssuer为 OpenShift Container Platform 服务帐户创建一个联邦身份凭证,供 Distributed Tracing 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将 Storage Blob Data Contributor 角色分配给创建的 Azure 管理身份的 Azure 服务主体身份。您可以运行以下命令来完成此操作:
$ az role assignment create \ --assignee <assignee_name> \1 --role "Storage Blob Data Contributor" \ --scope "/subscriptions/<subscription_id>- 1
- 您在第 1 步中创建的 Azure 管理身份的 Azure 服务主体身份。
提示您可以运行以下命令来获取
<assignee_name>值:$ az ad sp list --all --filter "servicePrincipalType eq 'ManagedIdentity'" | jq -r --arg idName <identity_name> '.[] | select(.displayName == $idName) | .appId'`获取您在第 1 步中创建的 Azure 管理身份的客户端 ID:
CLIENT_ID=$(az identity show \ --name <identity_name> \1 --resource-group <resource_group> \2 --query clientId \ -o tsv)为 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 创建对象存储 secret 时,按如下所示 Distributed Tracing Platform 实例的相关自定义资源:
TempoStack自定义资源示例apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack metadata: name: <name> namespace: <namespace> spec: # ... storage: secret:1 name: <secret_name> type: azure # ...- 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 # ...- 1
- 上一步中创建的 secret。
3.2.3. 使用安全令牌服务设置 Google Cloud 存储 复制链接链接已复制到粘贴板!
您可以使用 Google Cloud CLI 使用安全令牌服务 (STS) 设置 Google Cloud Storage (GCS)。
使用带有 GCS 和 STS 的 Distributed Tracing Platform 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
先决条件
- 已安装 Google Cloud CLI 的最新版本。
流程
- 在 Google Cloud Platform (GCP) 上创建 GCS 存储桶。
使用 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)将所需的 GCP 角色绑定到项目级别创建的服务帐户。您可以运行以下命令来完成此操作:
$ gcloud projects add-iam-policy-binding <project_id> \ --member "serviceAccount:$SERVICE_ACCOUNT_EMAIL" \ --role "roles/storage.objectAdmin"检索与集群关联的 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$//')添加 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- 1
$SERVICE_ACCOUNT_EMAIL是第 2 步中的命令的输出。
为存储 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 运行以下命令来获取正确的受众:
$ gcloud iam workload-identity-pools providers describe "$PROVIDER_NAME" --format='value(oidc.allowedAudiences[0])'运行以下命令,为 Distributed 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 创建对象存储 secret 时,按如下所示 Distributed Tracing Platform 实例的相关自定义资源:
TempoStack自定义资源示例apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack metadata: name: <name> namespace: <namespace> spec: # ... storage: secret:1 name: <secret_name> type: gcs # ...- 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 # ...- 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 实例。
流程
- 在 IBM Cloud 上,创建一个对象存储存储桶。
在 IBM Cloud 中,运行以下命令来创建用于连接到对象存储存储桶的服务密钥:
$ ibmcloud resource service-key-create <tempo_bucket> Writer \ --instance-name <tempo_bucket> --parameters '{"HMAC":true}'在 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>"在 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在 OpenShift Container Platform 中,设置
TempoStack自定义资源中的 storage 部分,如下所示:apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack # ... spec: # ... storage: secret: name: <ibm_cos_secret>1 type: s3 # ...- 1
- 包含 IBM Cloud Storage 访问和 secret 密钥的 secret 名称。