我已经设置了游牧集群,我的 20 人团队使用相同的 UI 来检查生产作业的状态。有人可以从我们的 UI 中删除关键作业,但我们无法控制它。
我们如何拒绝用户从 Nomad UI 中清除作业的能力?
我已经签出:https://developer.hashicorp.com/nomad/docs/other-specations/acl-policy
我尝试过一些像这样的政策,但没有奏效:
namespace "*" {
policy = "write"
capabilities = [
"list-jobs",
"parse-job",
"read-job",
"submit-job",
"dispatch-job",
"read-logs",
"read-fs",
"alloc-exec",
"alloc-lifecycle",
"csi-write-volume",
"csi-mount-volume",
"list-scaling-policies",
"read-scaling-policy",
"read-job-scaling",
"scale-job"
]
}
host_volume "*" {
policy = "write"
}
agent {
policy = "write"
}
node {
policy = "write"
}
quota {
policy = "write"
}
operator {
policy = "write"
}
我找不到任何可以否认的相关能力,以防止我们的游牧工作被清除。
对于我们的用例,我们的用户应该能够从我们的 UI 执行所有任务,除了在停止作业后从 UI 中清除作业的能力。我怎样才能实现这个目标?
没有这样的选项。停止作业时可以选择清除。如果用户可以停止,它就可以清除。用户可以停止作业,只要他可以
submit-job
。
Nomad 不保留工作历史记录。它被垃圾收集。取决于未清除的已停止作业,很容易出错 - 该作业随时可能消失。
我怎样才能实现这个目标?
我不是 100% 确定可以通过哨兵策略来完成https://developer.hashicorp.com/nomad/docs/enterprise/sentinel。您必须联系 Nomad 并询问他们。您可以在 github 上的 Nomad 上提出功能请求。
最简单的方法是运行您自己的 HTTP 代理服务器,并检查对 Nomad 的请求是否具有
stop?purge=true
url,并在出现此类情况时拒绝。不久前,我开始使用 nginx lua 插件进行实验 https://gitlab.com/Kamcuk/nomad-proxy/-/blob/master/lua/access.lua?ref_type=heads 。这是一个实验。
如果您想要作业的历史记录,那么
nomad operator /v1/event/stream > logfile.txt
然后用您最喜欢的语言(如Python)解析logfile.txt。