自动创建所需的 RBAC 资源

Alauda Build of OpenTelemetry v2 Operator 会在某些 Collector 组件需要访问整个集群中的 Kubernetes 资源时,自动创建所需的集群级 RBAC 资源。对于某些组件,例如 k8s_attributes processor 或 k8s_objects receiver,除了默认的 Operator 范围之外,还需要额外的 RBAC 权限。

自动创建 RBAC

当 OpenTelemetry Collector 配置包含需要集群范围访问权限的组件时,Operator 可以自动创建所需的 ClusterRoleClusterRoleBinding 资源。

NOTE

要启用自动创建 RBAC 的能力,您必须完成下面 操作步骤 部分中的步骤,以授予 Operator 管理集群级 RBAC 资源所需的权限。

以下是通常需要额外 RBAC 权限的组件示例:

  • k8s_attributes processor:需要权限来查询 Pod、Namespace、Node、ReplicaSet 和 Deployment 资源,以使用 Kubernetes 元数据丰富 telemetry 数据。
  • k8s_objects receiver:需要权限来 watch 和 list Kubernetes 资源,例如 Events、Pods 和 Nodes。
  • kubelet_stats receiver:需要权限访问 kubelet 端点,以获取 node 和 pod 指标。
  • resource_detection processor:需要权限访问 Node 资源,以进行资源检测。

创建 Collector 的用户所需权限

自动创建 RBAC 会经过权限提升检查。当 Operator 为 OpenTelemetryCollector 资源生成 ClusterRole 时,它会验证提交该资源的用户是否也拥有所授予的权限。如果用户不具备这些权限,则该资源会被准入 webhook 拒绝

  • 当 Collector 使用由 Operator 创建的 ServiceAccount 时,会针对提交用户检查生成的全部权限集。
  • 当 Collector 通过 spec.serviceAccount 重用现有的 ServiceAccount 时,仅检查该账户缺失的权限。

如果尽管 Operator 本身已正确授权,但创建 Collector 仍因权限错误而失败,请为提交用户授予与 Collector 所需相同的权限,或者由已经拥有这些权限的用户创建该资源。

操作步骤

  1. 创建 ClusterRole

    kubectl apply -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: generate-processors-rbac
    rules:
    - apiGroups:
      - rbac.authorization.k8s.io
      resources:
      - clusterrolebindings
      - clusterroles
      verbs:
      - create
      - delete
      - get
      - list
      - patch
      - update
      - watch
    EOF
  2. 创建 ClusterRoleBinding

    kubectl apply -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: generate-processors-rbac
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: generate-processors-rbac
    subjects:
    - kind: ServiceAccount
      name: opentelemetry-operator-controller-manager
      namespace: opentelemetry-operator2
    EOF
  3. (可选) 重启 Alauda Build of OpenTelemetry v2 Operator,以获取新的 RBAC 权限:

    TIP

    仅当 Operator 在您创建 ClusterRoleClusterRoleBinding 之前已经运行时,才需要执行此步骤。如果您是在安装 Operator 之前 创建了它们,则可以跳过此步骤。

    kubectl delete pod -n opentelemetry-operator2 -l app.kubernetes.io/name=opentelemetry-operator

删除 RBAC 资源

当您不再需要 Operator 自动创建集群级 RBAC 资源时,请删除在 操作步骤 部分创建的 ClusterRoleClusterRoleBinding,以释放已授予的权限。

WARNING

在删除这些权限之前,请先删除依赖自动创建 RBAC 的 OpenTelemetryCollector 资源。一旦 Operator 失去这些权限,它就无法再回收为这些 Collector 生成的集群级 RBAC 资源,这些资源将会留在集群中。

操作步骤

执行以下命令以删除 RBAC 资源:

kubectl delete clusterrolebinding generate-processors-rbac --ignore-not-found
kubectl delete clusterrole generate-processors-rbac --ignore-not-found