【问题标题】:How to include or exclude specific namespaces in cluster role kubernetes如何在集群角色 kubernetes 中包含或排除特定命名空间
【发布时间】:2020-03-31 21:45:30
【问题描述】:

我正在尝试创建一个守护程序集,它将从特定命名空间的节点中的所有 pod 收集日志。我不确定如何指定命名空间名称。

我有一个命名空间日志记录,我在其中部署守护程序集。我创建了一个如下的 serviceccount

apiVersion: v1
kind: ServiceAccount
metadata:
  name: fluent-bit
  namespace: logging

我的集群角色是这样的

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: fluent-bit-read
rules:
- apiGroups: [""]
  resources:
  - namespaces
  - pods
  verbs: ["get", "list", "watch"]

角色绑定

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: fluent-bit-read
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: fluent-bit-read
subjects:
- kind: ServiceAccount
  name: fluent-bit
  namespace: logging

现在,守护程序集从路径 /var/log/containers/*.log 收集日志,该路径当前包含来自所有命名空间中运行的容器的日志文件。有没有办法可以限制这个守护进程只从我需要的命名空间收集日志?

【问题讨论】:

  • 您的问题和标题无关。 Fluentd/bit 日志收集与 Kubernetes RBAC 完全无关。
  • fluentbit 在 kubernestes 集群中作为守护进程运行,我想将其限制为只读来自某些命名空间的日志
  • @vkr 为什么我的回答没有回答你的问题?您应该使用 Role 而不是 ClusterRole,因为 ClusterRole 是集群范围的,不能命名空间。

标签: kubernetes kubectl fluent-bit


【解决方案1】:

这是我们在 k8s 文档中的内容 (link)。

角色总是在特定的命名空间内设置权限;创建角色时,必须指定它所属的命名空间。

相比之下,ClusterRole 是一个非命名空间资源。资源具有不同的名称(Role 和 ClusterRole),因为 Kubernetes 对象总是必须具有命名空间或不具有命名空间;不可能两者兼有。

因此,在您的情况下,您需要使用 RoleRoleBinding 而不是 ClusterRole 和 ClusterRoleBinding。

【讨论】:

    【解决方案2】:

    您必须调整您的位配置以仅读取您想要的日志文件。或者,如果您愿意,也可以使用路由规则。这与 Kubernetes API 无关,Bit 通过绑定挂载直接从磁盘读取日志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-07
      • 2018-08-05
      • 2019-03-30
      • 2019-09-02
      • 2021-04-10
      • 2022-06-26
      • 1970-01-01
      • 2020-01-11
      相关资源
      最近更新 更多