kubernetes 将容器日志设置为除root之外的"admin" GID,以便让用户和日志记录/o11y实现者的生活更轻松,

sgtfey8w  于 6个月前  发布在  Kubernetes
关注(0)|答案(4)|浏览(59)

仍然有客户在使用Kubernetes,并讨论为什么日志守护程序集需要用户0。

到目前为止,有没有采用的方法来做我们在nix时代做的事情,将日志代理添加到一个可以访问磁盘上Kubelet日志的管理员组中?

在过去的几年里,这个问题有没有被记录和解决?这会让很多人的生活变得更轻松!

甚至有一个记录的安全配置文件,向k8s管理员、开发人员和合规部门解释,为什么有这么多工具试图“以root身份运行”。这肯定会帮助ISVs!

具体来说,关于节点级别的日志架构:

$x_{1e0f1}x$

vd8tlhqk

vd8tlhqk1#

这个问题目前正在等待分类。
如果SIG或子项目确定这是一个相关的问题,他们将通过应用triage/accepted标签并提供进一步的指导来接受它。
组织成员可以通过在评论中写入/triage accepted来添加triage/accepted标签。
有关使用PR评论与我互动的说明,请查看here。如果您对我的行为有任何问题或建议,请针对kubernetes/test-infra仓库提出一个问题。

cbwuti44

cbwuti443#

仍然有客户采用Kubernetes,并讨论为什么日志守护程序集需要用户0。
到目前为止,有没有采用的方法可以实现我们在nix时代所做的事,将日志代理添加到一个可以访问磁盘上的Kubelet日志的管理员组中 - /var/log/pods
在过去的几年里,这个问题有没有被记录和解决?这会让很多人的生活变得更轻松!
甚至有一个记录的安全配置文件,可以向k8s管理员、开发人员和合规部门解释,为什么有这么多工具试图“以root身份运行”。这肯定会对ISVs也有帮助!
具体来说,我们谈论的是节点级别的日志架构:https://kubernetes.io/docs/concepts/cluster-administration/logging/
当前,/var/logs/pods下的原始日志(.log)是由容器运行时生成的,而不是kubelet。kubelet无能为力。归档日志(.gz)是由kubelet生成的,但被认为是安全问题,全世界都可以看到。你指的是哪种日志?

# ls -rlt /var/log/pods/*/**/*
-rw-r-----. 1 root root /var/log/pods/kube-system_apiserver-demo1.test.com_712b37831be464ccc2fb1553ef89aa91/apiserver/66.log
-rw-r--r--. 1 root root /var/log/pods/kube-system_coredns-cfngt_8a5bacf2-063b-4ffc-b86a-237b94a07246/coredns/18.log.20240329-044703.gz
pes8fvy9

pes8fvy94#

我指的是 /var/log/pods 。我个人并不关心世界可读的存档。
大多数日志供应商代理只读取实时原始日志,是的,我理解容器引擎会生成它们,但是为了 kubelet 服务。Kubelet 已经暴露了容器引擎设置,如旋转大小(在生产环境中运行的 k8s 运行的默认超级低)。
我们唯一的问题是它们被作为 root 所有,因此我们不得不处理特权安全上下文和以用户 0 运行。
kubelet 和容器引擎之间的一些设置应该将其设置为一些可接受的管理组,如 root:adm - 只是使用 adm 作为管理员组的一个示例 - 这样我们的日志供应商和 k8s 管理员就不需要每次新用户采用 k8s 并运行日志守护程序集时都经历安全摩擦。
这比我现在看到的 hacky 方式要好得多。日志供应商不应该不得不越过这些权限,或者承担解释为什么 k8s 和他们选择的容器引擎是这样以及解决这个问题的责任。
否则,这至少应该在日志架构文档中有所涵盖。也许可以提供一个锁定的安全配置文件,让每个人都可以从那里跳转到只允许对主机路径进行只读访问。
过去在容器引擎级别已经讨论过这个问题 - 例如 -
containerd/cri#613
containerd/containerd#8920
希望看到一些 k8s 领导对此发表意见。

相关问题