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)。
将分布式 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>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "<oidc_provider>:sub": [ "system:serviceaccount:<openshift_project_for_tempo>:tempo-<tempo_custom_resource_name>" "system:serviceaccount:<openshift_project_for_tempo>:tempo-<tempo_custom_resource_name>-query-frontend" ] } } } ] }
{ "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 Copied! 提示您还可以运行以下命令来获取 OIDC 供应商的值:
oc get authentication cluster -o json | jq -r '.spec.serviceAccountIssuer' | sed 's~http[s]*://~~g'
$ oc get authentication cluster -o json | jq -r '.spec.serviceAccountIssuer' | sed 's~http[s]*://~~g'
Copy to Clipboard Copied! 通过附加创建的
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 create-role \ --role-name "tempo-s3-access" \ --assume-role-policy-document "file:///tmp/trust.json" \ --query Role.Arn \ --output text
Copy to Clipboard Copied! 将 AWS IAM 策略附加到创建的 AWS IAM 角色。您可以运行以下命令来完成此操作:
aws iam attach-role-policy \ --role-name "tempo-s3-access" \ --policy-arn "arn:aws:iam::aws:policy/AmazonS3FullAccess"
$ aws iam attach-role-policy \ --role-name "tempo-s3-access" \ --policy-arn "arn:aws:iam::aws:policy/AmazonS3FullAccess"
Copy to Clipboard Copied! 如果不使用 CCO,请跳过这一步。如果使用 CCO,请为 Tempo Operator 配置云供应商环境。您可以运行以下命令来完成此操作:
oc patch subscription <tempo_operator_sub> \ -n <tempo_operator_namespace> \ --type='merge' -p '{"spec": {"config": {"env": [{"name": "ROLEARN", "value": "'"<role_arn>"'"}]}}}'
$ 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 Copied! 在 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
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 Copied! 创建对象存储 secret 时,按如下所示更新分布式 Tracing Platform 实例的相关自定义资源:
TempoStack
自定义资源示例apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack metadata: name: <name> namespace: <namespace> spec: # ... storage: secret: name: <secret_name> type: s3 credentialMode: token-cco # ...
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 Copied! TempoMonolithic
自定义资源示例apiVersion: tempo.grafana.com/v1alpha1 kind: TempoMonolithic metadata: name: <name> namespace: <namespace> spec: # ... storage: traces: backend: s3 s3: secret: <secret_name> credentialMode: token-cco # ...
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 Copied!
3.2.2. 使用安全令牌服务设置 Azure 存储
您可以使用 Azure 命令行界面(Azure CLI)使用安全令牌服务(STS)设置 Azure 存储。
使用带有 Azure 存储和 STS 的分布式跟踪平台只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
先决条件
- 已安装 Azure CLI 的最新版本。
- 您已创建了 Azure 存储帐户。
- 您已创建了 Azure blob 存储容器。
流程
运行以下命令来创建 Azure 管理的身份:
az identity create \ --name <identity_name> \ --resource-group <resource_group> \ --location <region> \ --subscription <subscription_id>
$ az identity create \ --name <identity_name> \
1 --resource-group <resource_group> \
2 --location <region> \
3 --subscription <subscription_id>
4 Copy to Clipboard Copied! 为 OpenShift Container Platform 服务帐户创建一个联邦身份凭证,供分布式 Trac Platform 的所有组件使用,但 Query Frontend 除外。您可以运行以下命令来完成此操作:
az identity federated-credential create \ --name <credential_name> \ --identity-name <identity_name> \ --resource-group <resource_group> \ --issuer <oidc_provider> \ --subject <tempo_service_account_subject> \ --audiences <audience>
$ 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 Copied! 提示您可以运行以下命令来获取集群的 OpenID Connect (OIDC)签发者的 URL:
oc get authentication cluster -o json | jq -r .spec.serviceAccountIssuer
$ oc get authentication cluster -o json | jq -r .spec.serviceAccountIssuer
Copy to Clipboard Copied! 为 OpenShift Container Platform 服务帐户创建一个联邦身份凭证,供分布式平台的 Query Frontend 组件使用。您可以运行以下命令来完成此操作:
az identity federated-credential create \ --name <credential_name>-frontend \ --identity-name <identity_name> \ --resource-group <resource_group> \ --issuer <cluster_issuer> \ --subject <tempo_service_account_query_frontend_subject> \ --audiences <audience> | jq
$ 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 Copied! 将 Storage Blob Data Contributor 角色分配给创建的 Azure 管理身份的 Azure 服务主体身份。您可以运行以下命令来完成此操作:
az role assignment create \ --assignee <assignee_name> \ --role "Storage Blob Data Contributor" \ --scope "/subscriptions/<subscription_id>
$ az role assignment create \ --assignee <assignee_name> \
1 --role "Storage Blob Data Contributor" \ --scope "/subscriptions/<subscription_id>
Copy to Clipboard Copied! - 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'`
$ az ad sp list --all --filter "servicePrincipalType eq 'ManagedIdentity'" | jq -r --arg idName <identity_name> '.[] | select(.displayName == $idName) | .appId'`
Copy to Clipboard Copied! 获取您在第 1 步中创建的 Azure 管理身份的客户端 ID:
CLIENT_ID=$(az identity show \ --name <identity_name> \ --resource-group <resource_group> \ --query clientId \ -o tsv)
CLIENT_ID=$(az identity show \ --name <identity_name> \
1 --resource-group <resource_group> \
2 --query clientId \ -o tsv)
Copy to Clipboard Copied! 为 Azure 工作负载身份联邦(WIF)创建 OpenShift Container Platform secret。您可以运行以下命令来完成此操作:
oc create -n <tempo_namespace> secret generic azure-secret \ --from-literal=container=<azure_storage_azure_container> \ --from-literal=account_name=<azure_storage_azure_accountname> \ --from-literal=client_id=<client_id> \ --from-literal=audience=<audience> \ --from-literal=tenant_id=<tenant_id>
$ 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 Copied! 创建对象存储 secret 时,按如下所示更新分布式 Tracing Platform 实例的相关自定义资源:
TempoStack
自定义资源示例apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack metadata: name: <name> namespace: <namespace> spec: # ... storage: secret: name: <secret_name> type: azure # ...
apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack metadata: name: <name> namespace: <namespace> spec: # ... storage: secret:
1 name: <secret_name> type: azure # ...
Copy to Clipboard Copied! - 1
- 上一步中创建的 secret。
TempoMonolithic
自定义资源示例apiVersion: tempo.grafana.com/v1alpha1 kind: TempoMonolithic metadata: name: <name> namespace: <namespace> spec: # ... storage: traces: backend: azure azure: secret: <secret_name> # ...
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 Copied! - 1
- 上一步中创建的 secret。
3.2.3. 使用安全令牌服务设置 Google Cloud 存储
您可以使用 Google Cloud CLI 使用安全令牌服务(STS)设置 Google Cloud Storage (GCS)。
使用带有 GCS 和 STS 的分布式跟踪平台只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(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> \ --display-name="Tempo Account" \ --project <project_id> \ --format='value(email)' \ --quiet)
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 Copied! 将所需的 GCP 角色绑定到项目级别创建的服务帐户。您可以运行以下命令来完成此操作:
gcloud projects add-iam-policy-binding <project_id> \ --member "serviceAccount:$SERVICE_ACCOUNT_EMAIL" \ --role "roles/storage.objectAdmin"
$ gcloud projects add-iam-policy-binding <project_id> \ --member "serviceAccount:$SERVICE_ACCOUNT_EMAIL" \ --role "roles/storage.objectAdmin"
Copy to Clipboard Copied! 检索与集群关联的 Google Cloud Workload Identity Pool 的
POOL_ID
值。您可以如何检索这个值取决于您的环境,因此命令只是示例:OIDC_ISSUER=$(oc get authentication.config cluster -o jsonpath='{.spec.serviceAccountIssuer}') \ &&
$ 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 Copied! 添加 IAM 策略绑定。您可以运行以下命令来完成此操作:
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>" \ --project=<project_id> \ --quiet \ &&
$ 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 Copied! - 1
$SERVICE_ACCOUNT_EMAIL
是第 2 步中的命令的输出。
为 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 \ --credential-source-type=text \ --output-file=<output_file_path>
$ 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 Copied! 运行以下命令来获取正确的受众:
gcloud iam workload-identity-pools providers describe "$PROVIDER_NAME" --format='value(oidc.allowedAudiences[0])'
$ gcloud iam workload-identity-pools providers describe "$PROVIDER_NAME" --format='value(oidc.allowedAudiences[0])'
Copy to Clipboard Copied! 运行以下命令,为分布式 Tracing Platform 创建存储 secret。
oc -n <tempo_namespace> create secret generic gcs-secret \ --from-literal=bucketname="<bucket_name>" \ --from-literal=audience="<audience>" \ --from-file=key.json=<output_file_path>
$ 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 Copied! 创建对象存储 secret 时,按如下所示更新分布式 Tracing Platform 实例的相关自定义资源:
TempoStack
自定义资源示例apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack metadata: name: <name> namespace: <namespace> spec: # ... storage: secret: name: <secret_name> type: gcs # ...
apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack metadata: name: <name> namespace: <namespace> spec: # ... storage: secret:
1 name: <secret_name> type: gcs # ...
Copy to Clipboard Copied! - 1
- 上一步中创建的 secret。
TempoMonolithic
自定义资源示例apiVersion: tempo.grafana.com/v1alpha1 kind: TempoMonolithic metadata: name: <name> namespace: <namespace> spec: # ... storage: traces: backend: gcs gcs: secret: <secret_name> # ...
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 Copied! - 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}'
$ ibmcloud resource service-key-create <tempo_bucket> Writer \ --instance-name <tempo_bucket> --parameters '{"HMAC":true}'
Copy to Clipboard Copied! 在 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>"
$ 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 Copied! 在 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
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 Copied! 在 OpenShift Container Platform 中,设置
TempoStack
自定义资源中的 storage 部分,如下所示:apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack # ... spec: # ... storage: secret: name: <ibm_cos_secret> type: s3 # ...
apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack # ... spec: # ... storage: secret: name: <ibm_cos_secret>
1 type: s3 # ...
Copy to Clipboard Copied! - 1
- 包含 IBM Cloud Storage 访问和 secret 密钥的 secret 名称。