kubewarden/go-policy-template
GitHub: kubewarden/go-policy-template
用于快速搭建 Kubewarden Kubernetes 准入控制策略的 Go 语言模板仓库,包含示例代码、测试框架和 CI/CD 配置。
Stars: 12 | Forks: 16
[](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, 策略模板, 脚手架, 请求拦截