我正在尝试创建一个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
收集日志,该路径当前包含在所有名称空间中运行的容器的日志文件。有没有一种方法可以限制这个守护进程只从我需要的名称空间收集日志?
3条答案
按热度按时间62lalag41#
以下是我们在k8s文档中的内容(链接)。
角色总是在特定的命名空间内设置权限;当你创建一个角色时,你必须指定它所属的命名空间。
相比之下,ClusterRole是非命名空间资源。资源有不同的名称(Role和ClusterRole),因为Kubernetes对象总是必须有命名空间或没有命名空间;不可能两者都是
因此,在您的示例中,您需要使用Role和RoleBinding,而不是ClusterRole和ClusterRoleBinding。
f8rj6qna2#
你必须调整你的比特配置,只读取你想要的日志文件。或者,如果您愿意,也可以使用路由规则。这与Kubernetes API无关,Bit通过绑定挂载直接从磁盘读取日志。
sqougxex3#
ClusterRole
与RoleBinding
RoleBinding
还可以引用ClusterRole
,将ClusterRole
中定义的权限授予RoleBinding
名称空间内的资源。这种引用允许您在集群中定义一组公共角色,然后在多个名称空间中重用它们。
创建
RoleBinding
yaml使用
RoleBinding
代替ClusterRoleBinding
创建包含以下内容的文件并保存为
rb.yaml
申请
RoleBinding
应用yaml文件
假设您希望在
logging
namespace
上限制daemonset
参考
https://stackoverflow.com/a/60960500/21099211通过@Juliano Costa
https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole