OPA 进阶-分布式利器 Bundle

https://gocn.vip/topics/10268
OPA实现的轻量级策略引擎,一开始就是为了云原生环境的service提供解耦的策略服务,分布式是必然要考虑的问题。



在Bundle api的设计中,其实就全面考虑并体现了在分布式应用中如何更好的解耦策略引擎的管理。



比如:



如何做集中配置管理
如何动态更新策略
如何监控策略引擎节点的状态以及决策日志收集
有了这些功能,再加上其高效的策略描述语言Rego,OPA才真正称得上是云原生时代的通用策略引擎。



本文将带大家简单梳理一遍Bundle的组织方式、管理 api、及监控方式。



考虑到一次性过完不易消化,文末会提供一个直接可实操的docker-compose版本的demo,将全面覆盖本文细节

下面我们先来看下Bundle的文件组织方式



在Bundle下的data,只能被识别data.json和data.yaml的文件, 而其上边的目录会作为其数据前缀



如下边roles/data.json (bundle/example作为一个bundle),会将data.json的数据挂在data.roles节点下



cd bundle/example
tree -a
.
├── .manifest
├── bindings
│ └── data.json
├── main.rego
├── rbac.rego
└── roles
└── data.json
其中.manifest文件是Bundle的一个可选的元数据(metadata)配置文件



cat .manifest
{
“revision” : “9f160bcd446bf50b1b17b570c322198a68d8e106”,
“roots”: [“roles”, “bindings”,”rbac”,”system”]
}
它的作用是声明Bundle的版本revision及其下的路径前缀(roots: path prefix)



roots不仅规定了Bundle应该有的路径前缀;在用Bundle api(后边会提到)更新文件时,也会按其规定的路径前缀来更新文件



然后bundle也支持tarball格式加载到server



例如opa run -b的方式指定Bundle



cd bundle/example
tar -czf bundle.tar.gz .
opa run -b bundle.tar.gz
Tips: 关于如何在交互式命令行里传递input。 之前非 bundle 使用 opa run quick-start repl.input:quick-start/input.json 到 bundle 格式时,就需要构建 repl/input/data.json 文件格式作为输入



https://www.openpolicyagent.org/docs/latest/rest-api/
https://github.com/NewbMiao/opa-koans/tree/master/bundle



https://www.cnblogs.com/uoyo/p/12421553.html
https://www.cnblogs.com/jadeshu/p/10663563.html
https://www.jianshu.com/p/ffc408ae257f
https://www.jianshu.com/p/ef6023357aaf


Category golang