我在 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,并在将新行写入日志文件时进行更新。