如何抑制 kubernetes 容器中的日志?

如何抑制 kubernetes 容器中的日志?

我在 kubernetes 集群中设置了一个 freeradius 容器。默认情况下,freeradius 不会记录身份验证尝试或以纯文本形式记录密码,但是,如果使用“-X”参数(调试模式)启动服务,它会覆盖默认配置并将所有内容记录到 STDOUT。我尝试不在部署文件中指定该参数,但容器在启动时崩溃。

有没有办法在容器中运行 freeradius,以便它首先不会创建这些日志,或者配置部署以便无法访问这些日志?

答案1

如果您将日志作为 pod 的子资源,则可以使用 RBAC 角色来管理它。

要在 RBAC 角色中表示这一点,请使用斜线来分隔资源和子资源。要允许主体读取 Pod 和 Pod 日志,您可以这样写:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default
  name: pod-logs-reader
rules:
- apiGroups: [""]
  resources: ["pods", "pods/log"]
  verbs: ["get", "list"]

因此,要限制对 pod 日志的访问,你只需要不是将“pods/log”纳入资源列表

另外,请记住,规则在 kubernetes RBAC 中纯粹是附加的,因此您需要列出所有可访问的资源,否则您将无法访问它们。

创建角色后,您需要将其链接到您的用户或服务帐号RoleBinding

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: pod-logs-reader-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: pod-logs-reader
subjects:
- kind: User
  name: "[email protected]"
  apiGroup: rbac.authorization.k8s.io

答案2

好吧,事实证明,实现我的目标的方法与我预期的完全不同。我能够通过为 /var/run/freeradius 和 /var/log/freeradius 创建 EmptyDir 卷挂载来启动 freeradius 容器而无需调试模式,以便这些目录可写(不确定为什么 /var/run/freeradius 在调试模式下不需要可写,但没关系),然后对于命令,有以下行:

command: ["/bin/bash","-c","freeradius && tail -F /var/log/freeradius/radius.log"]

基本上,它的作用是启动 freeradius,然后实时将日志读取到 STDOUT,并在将新行写入日志文件时进行更新。

相关内容