如何在集群角色kubernetes中包含或排除特定命名空间

rqqzpn5f  于 2023-06-21  发布在  Kubernetes
关注(0)|答案(3)|浏览(159)

我正在尝试创建一个daemonset,它将从特定名称空间的节点中的所有pod收集日志。我不确定如何指定命名空间名称。
我有一个名称空间日志,我在其中部署了daemonset。我创建了一个servicecount如下

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

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

62lalag4

62lalag41#

以下是我们在k8s文档中的内容(链接)。
角色总是在特定的命名空间内设置权限;当你创建一个角色时,你必须指定它所属的命名空间。
相比之下,ClusterRole是非命名空间资源。资源有不同的名称(Role和ClusterRole),因为Kubernetes对象总是必须有命名空间或没有命名空间;不可能两者都是
因此,在您的示例中,您需要使用RoleRoleBinding,而不是ClusterRole和ClusterRoleBinding。

f8rj6qna

f8rj6qna2#

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

sqougxex

sqougxex3#

ClusterRoleRoleBinding

RoleBinding还可以引用ClusterRole,将ClusterRole中定义的权限授予RoleBinding名称空间内的资源。
这种引用允许您在集群中定义一组公共角色,然后在多个名称空间中重用它们。

创建RoleBinding yaml

使用RoleBinding代替ClusterRoleBinding
创建包含以下内容的文件并保存为rb.yaml

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
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

申请RoleBinding

应用yaml文件

kubectl apply -rb.yaml -n [namespace]

假设您希望在loggingnamespace上限制daemonset

kubectl apply -rb.yaml -n logging

参考

https://stackoverflow.com/a/60960500/21099211通过@Juliano Costa
https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole

相关问题