3.3. 配置权限和租户.
在安装 TempoStack 或 TempoMonolithic 实例之前,您必须定义一个或多个租户并配置其读写访问权限。您可以使用 Kubernetes 基于角色的访问控制(RBAC)的集群角色和集群角色绑定来配置这样的授权设置。默认情况下,没有用户授予读取或写入权限。如需更多信息,请参阅"配置租户的读取权限"和"配置租户的写入权限"。
红帽构建的 OpenTelemetry 收集器可以使用带有 RBAC 的服务帐户来编写数据,将 trace 数据发送到 TempoStack 或 TempoMonolithic 实例。
| 组件 | Tempo Gateway 服务 | OpenShift OAuth | TokenReview API | SubjectAccessReview API |
|---|---|---|---|---|
| 身份验证 | X | X | X | |
| 授权 | X | X |
3.3.1. 为租户配置读取权限 复制链接链接已复制到粘贴板!
您可以从 web 控制台或命令行的 Administrator 视图为租户配置读取权限。
先决条件
-
以具有
cluster-admin角色的用户身份登录到 OpenShift Container Platform Web 控制台。 -
对于 Red Hat OpenShift Dedicated,您必须使用具有
dedicated-admin角色的帐户登录。
流程
使用您选择的值添加到
TempoStack自定义资源 (CR),通过添加tenantName和tenantId参数来定义租户:TempoStackCR 中的租户示例apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack metadata: name: redmetrics spec: # ... tenants: mode: openshift authentication: - tenantName: dev1 tenantId: "1610b0c3-c509-4592-a256-a1871353dbfa"2 # ...将租户添加到具有读取(
get)权限的集群角色,以读取 trace。ClusterRole资源中的 RBAC 配置示例apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: tempostack-traces-reader rules: - apiGroups: - 'tempo.grafana.com' resources:1 - dev - prod resourceNames: - traces verbs: - 'get'2 通过为上一步中的集群角色定义集群角色绑定,授予经过身份验证的用户对 trace 数据具有读取权限。
ClusterRoleBinding资源中的 RBAC 配置示例apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: tempostack-traces-reader roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: tempostack-traces-reader subjects: - kind: Group apiGroup: rbac.authorization.k8s.io name: system:authenticated1 - 1
- 授予所有经过身份验证的用户的 trace 数据读取权限。
3.3.2. 为租户配置写入权限 复制链接链接已复制到粘贴板!
您可以从 web 控制台或命令行的 Administrator 视图为租户配置写入权限。
先决条件
-
以具有
cluster-admin角色的用户身份登录到 OpenShift Container Platform Web 控制台。 -
对于 Red Hat OpenShift Dedicated,您必须使用具有
dedicated-admin角色的帐户登录。 - 已安装 OpenTelemetry Collector,并将其配置为使用具有权限的授权服务帐户。如需更多信息,请参阅 Red Hat build of OpenTelemetry 文档中的"自动创建所需的 RBAC 资源"。
流程
创建用于 OpenTelemetry Collector 的服务帐户。
apiVersion: v1 kind: ServiceAccount metadata: name: otel-collector namespace: <project_of_opentelemetry_collector_instance>将租户添加到具有 write (
create)权限的集群角色中来编写 trace。ClusterRole资源中的 RBAC 配置示例apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: tempostack-traces-write rules: - apiGroups: - 'tempo.grafana.com' resources:1 - dev resourceNames: - traces verbs: - 'create'2 通过定义集群角色绑定来附加 OpenTelemetry Collector 服务帐户,为 OpenTelemetry Collector 授予写入权限。
ClusterRoleBinding资源中的 RBAC 配置示例apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: tempostack-traces roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: tempostack-traces-write subjects: - kind: ServiceAccount name: otel-collector1 namespace: otel- 1
- 上一步中创建的服务帐户。客户端在导出 trace 数据时使用它。
配置
OpenTelemetryCollector自定义资源,如下所示:-
将
bearertokenauth扩展和有效令牌添加到追踪管道服务。 -
在
otlp/otlphttpexporters 中添加租户名称,作为X-Scope-OrgID标头。 使用有效的证书颁发机构文件启用 TLS。
OpenTelemetry CR 配置示例
apiVersion: opentelemetry.io/v1beta1 kind: OpenTelemetryCollector metadata: name: cluster-collector namespace: <project_of_tempostack_instance> spec: mode: deployment serviceAccount: otel-collector1 config: | extensions: bearertokenauth:2 filename: "/var/run/secrets/kubernetes.io/serviceaccount/token"3 exporters: otlp/dev:4 endpoint: sample-gateway.tempo.svc.cluster.local:8090 tls: insecure: false ca_file: "/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt"5 auth: authenticator: bearertokenauth headers: X-Scope-OrgID: "dev"6 otlphttp/dev:7 endpoint: https://sample-gateway.<project_of_tempostack_instance>.svc.cluster.local:8080/api/traces/v1/dev tls: insecure: false ca_file: "/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt" auth: authenticator: bearertokenauth headers: X-Scope-OrgID: "dev" service: extensions: [bearertokenauth] pipelines: traces: exporters: [otlp/dev]8 # ...
-
将