vilaca/portal
GitHub: vilaca/portal
Portal 是一个 Kubernetes 策略执行工具,通过准入控制、审计和网络策略分析来增强集群安全性。
Stars: 0 | Forks: 0
# 门户
一个 Kubernetes 准入控制 webhook、基于 Informer 的审计循环以及声明式
NetworkPolicy 分析器——内置响应动作引擎。规则采用 [expr-lang 表达式语言](https://github.com/expr-lang/expr) 编写,并以
`PortalClusterRule` / `PortalRule` CRD 形式交付(或从文件夹加载)。
## 为何选择 Portal
Kubernetes 策略领域竞争激烈——OPA/Gatekeeper、Kyverno、Kubewarden、
jsPolicy、Polaris、Falco、Tetragon。完整对比详见
[`docs/comparison/feature-matrix.md`](docs/comparison/feature-matrix.md)。Portal 的切入点简述如下:
- **单一工具,三重控制点。** 准入控制(在 API 服务器层拦截)、
基于监视的审计(捕获配置漂移,并在*关联对象*变更时重新评估)以及 NetworkPolicy 图形分析——均基于相同的规则模式、相同的表达式引擎、相同的 `kubectl apply` 工作流。其他工具通常覆盖其中一至两点;Portal 则三者兼备。
- **规则是布尔表达式,而非领域特定语言。** 一个特权容器检查大约只需 8 行 expr-lang 代码。针对 Pod 结构的简化语法(如 `container.securityContext.privileged`、`spec.hostPID`、`metadata.labels`)是刻意为原始对象提供的精简接口——通用的 `object.*` “逃生舱”始终可用。
- **响应动作是一等公民。** 一条规则可触发 `label`、`annotate`、`evict`、`patch-networkpolicy`、`revoke-sa-token` 或调用 AlertManager 等动作——这些动作是幂等且限流的——直接从违规事件中发起。该领域最接近的类比是 Kyverno + Falco + Falco Talon 的组合;而 Portal 通过一个二进制文件即可完成。
- **原生支持 AlertManager 输出。** 准入决策和审计结果无需适配器即可接入现有的 Prometheus + AlertManager 流水线。可配合 `PolicyReport` 用于仪表盘,`portal_*` Prometheus 指标用于告警,结构化 `slog` 用于日志记录。
Portal **当前不支持**的功能:变更(mutation)、镜像验证、资源生成、运行时检测(eBPF/内核)。如需这些功能,请参阅对比文档——Kyverno、Cosign、Falco 和 Tetragon 才是对应的工具。
## 工作原理
三个事件源、一种规则语言、一个动作流水线:
- **准入 Webhook** —— 默认配置为 `ValidatingWebhookConfiguration` 并设置 `failurePolicy: Fail`。同步评估 `mode: [admission]` 规则,并可执行 `deny` / `warn` / `dryrun`。
- **审计循环** —— 基于可配置 GVK 集合的动态 Informer。异步评估 `mode: [audit]` 规则并输出到所有接收端,当规则停止触发时还会发出合成的 `resolved` 事件。
- **NetworkPolicy 分析器** —— 图形化检查,默认拒绝缺失、宽泛的 CIDR 出口规则、不可达的 Selector、无目标的策略等。
输出同时分发给 **AlertManager**、**PolicyReport**(`wgpolicyk8s.io/v1alpha2`)、
**Prometheus**(`portal_*` 指标)和 **标准输出**。动作(`label`、`annotate`、`evict`、`patch-networkpolicy`、`revoke-sa-token`、`alertmanager`、`policyreport-gc`)通过每条规则的限流器 + LRU 幂等缓存执行。
## 快速开始
```
# 构建 + 测试
make build
make test
# 启动本地 kind 集群 + 运行完整的 e2e 测试套件
./deploy/test/kind.sh
# 在现有集群上安装
helm install portal deploy/helm/portal \
--namespace portal-system --create-namespace \
--set audit.enabled=true \
--set network.enabled=true
```
然后应用一条规则:
```
apiVersion: portal.io/v1alpha1
kind: PortalClusterRule
metadata:
name: disallow-privileged
spec:
name: disallow-privileged
enabled: true
severity: high
mode: [admission]
enforcementAction: deny
match:
gvk:
- {group: "", version: v1, kind: Pod}
rule: container.securityContext.privileged == true
```
完整演练指南:[`docs/getting-started/quickstart-kind.md`](docs/getting-started/quickstart-kind.md)。
## 文档
- **与业界对比:** [`docs/comparison/feature-matrix.md`](docs/comparison/feature-matrix.md)
—— Portal 与 OPA/Gatekeeper、Kyverno、Kubewarden、jsPolicy、Polaris、Falco、Tetragon 的并列比较,外加一个纵深防御参考架构。
- **设计蓝图:** [`docs/POC-TO-PRODUCTION.md`](docs/POC-TO-PRODUCTION.md)
- **文档站点:** [`docs/README.md`](docs/README.md) —— 概念、参考手册、操作手册、运维手册、ADR。
- **CRD + Helm 配置值参考:** [`docs/reference/`](docs/reference/)
- **迁移 SpEL 风格规则库:** [`docs/migration/`](docs/migration/)
及 `portal migrate-rules` 子命令。
## 项目状态
- **单元测试:** 25 个包,全部通过(`make test`)。
- **端到端套件:** 在 kind 上 10 个通过,1 个跳过,0 个失败
(`./deploy/test/kind.sh`)。
- **已知缺口:** [`docs/v1-followups.md`](docs/v1-followups.md) §5。
## 安全
通过 [`SECURITY.md`](SECURITY.md) 报告漏洞——请**不要**
为安全报告提交公开 issue。
## 许可证
[Apache License 2.0](LICENSE)。
标签:3D图, APT组织, EVTX分析, Kubernetes admission webhook, Lerna, 云原生策略管理, 告警管理, 响应动作引擎, 声明式策略, 子域名突变, 审计循环, 日志审计, 策略引擎, 策略执行, 策略检查, 网络安全挑战, 网络策略分析, 网络策略审计, 自定义资源定义, 表达式规则, 规则即代码