kubewarden/go-policy-template

GitHub: kubewarden/go-policy-template

用于快速搭建 Kubewarden Kubernetes 准入控制策略的 Go 语言模板仓库,包含示例代码、测试框架和 CI/CD 配置。

Stars: 12 | Forks: 16

[![Stable](https://img.shields.io/badge/status-stable-brightgreen?style=for-the-badge)](https://github.com/kubewarden/community/blob/main/REPOSITORIES.md#stable) # go-policy-template 这是一个模板仓库,可用于脚手架搭建一个使用 Go 语言编写的 Kubewarden 策略。 别忘了查看 Kubewarden 的 [官方文档](https://docs.kubewarden.io) 以获取更多关于编写策略的信息。 ## 介绍 此仓库包含一个用 Go 编写的可运行策略。 该策略检查 Kubernetes Pod 的 `name`,如果该名称位于“拒绝列表”中,则拒绝该请求。 “拒绝列表”可由用户通过策略的运行时设置进行配置。 您可以使用以下结构来表达策略的配置: ``` { "denied_names": [ "badname1", "badname2" ] } ``` ## 代码组织 负责解析设置的代码位于 `settings.go` 文件中。 实际的验证代码位于 `validate.go` 文件中。 `main.go` 仅包含注册策略入口点的代码。 ## 实现细节 目前,官方 Go 编译器无法生成可在浏览器**外部**运行的 WebAssembly 二进制文件。 因此,您只能使用 [TinyGo](https://tinygo.org/) 编译器来构建 Kubewarden Go 策略。 Kubewarden 策略需要处理 JSON 数据。 例如,策略设置和 Kubernetes 接收到的实际请求。 TinyGo 尚不完全支持 Go 标准库, 它对 Go 反射的支持有限。 因此,无法从上游(例如:`k8s.io/api/core/v1`)导入官方 Kubernetes Go 库。 导入这些官方 Kubernetes 类型会导致编译失败。 然而,仍然可以通过使用某些第三方库来编写 Kubewarden 策略。 编写 Kubewarden 策略时,以下库列表可能会很有用: - 适用于 TinyGo 的 [Kubernetes Go types](https://github.com/kubewarden/k8s-objects): 官方的 Kubernetes Go Types 无法与 TinyGo 一起使用。 该模块以对 TinyGo 友好的方式提供了所有 Kubernetes 类型。 - 解析 JSON:可以使用 [gjson](https://github.com/tidwall/gjson) 库编写针对 JSON 文档的查询。 该库具有强大的查询语言,允许快速浏览 JSON 文档并检索数据。 - 通用 `set` 实现:使用 [Set](https://en.wikipedia.org/wiki/Set_(abstract_data_type)) 数据类型可以减少策略中的代码量, 请查看 Set 实现提供的 `union`、`intersection`、`difference` 和其他操作。 编写策略时可以使用 [mapset](https://github.com/deckarep/golang-set)。 最后但同样重要的是,该策略利用了 [Kubewarden's Go SDK](https://github.com/kubewarden/policy-sdk-go) 提供的辅助函数。 ## 测试 此策略附带使用 Go 测试框架实现的单元测试。 照例,测试定义在 `_test.go` 文件中。 由于这些测试不是最终 WebAssembly 二进制文件的一部分,因此可以使用官方 Go 编译器来运行它们。 可以通过一个简单的命令运行单元测试: ``` make test ``` 测试 TinyGo 编译的最终结果也很重要: 即实际的 WebAssembly 模块。 这是通过第二组端到端测试完成的。 这些测试使用 Kubewarden 项目提供的 `kwctl` cli 来加载和执行策略。 e2e 测试是使用 [bats](https://github.com/bats-core/bats-core) —— Bash 自动化测试系统实现的。 端到端测试定义在 `e2e.bats` 文件中,可以使用以下命令运行: ``` make e2e-tests ``` ## 自动化 此项目具有以下 [GitHub Actions](https://docs.github.com/en/actions): - `e2e-tests`:此 action 构建 WebAssembly 策略, 安装 `bats` 实用程序,然后运行端到端测试。 - `unit-tests`:此 action 运行 Go 单元测试。 - `release`:此 action 构建 WebAssembly 策略并将其推送到用户定义的 OCI registry ([ghcr](https://ghcr.io) 是一个不错的选择)。
标签:AI工具, EVTX分析, Github Template, Go, Kubewarden, Pod安全, Policy-as-Code, Ruby工具, TinyGo, WebAssembly, 子域名突变, 安全策略, 提示词设计, 日志审计, 服务端Wasm, 策略模板, 脚手架, 请求拦截