FinOps Gatekeeper Provider 为 Open Policy Agent Gatekeeper 提供策略模版和外部数据服务,用于 FinOps 场景的 Kubernetes 资源管理和主动成本控制。
- 外部数据提供: 为 Gatekeeper 提供实时成本、资源利用率等外部数据
- 多策略支持: 支持 Mutating 和 Validating 策略
- 动态配置: 可通过配置文件动态注册多个策略处理器
- 工作负载预算控制: 防止工作负载扩容时超出成本预算
- 资源利用率验证: 基于实际资源利用率控制扩容操作
- 智能推荐验证: 验证资源推荐配置的有效性
- 默认资源配置: 自动为容器设置合理的资源请求和限制
- 标签管理: 基于指定标签的准入策略
- 更多策略补充中
策略模版定义和下发策略,请参考policys/下的策略模板定义和下发策略。 示例:
# 下发规范 container resource 为指定枚举值的限制策略
kubectl apply -f policies/validating/container-resource-enums/template.yaml
kubectl apply -f policies/validating/container-podrequirelabels/constraint.yaml
# 下发规范 Pod 包括指定 label 的限制策略
kubectl apply -f policies/validating/pod-require-labels/template.yaml
kubectl apply -f policies/validating/pod-require-labels/constraint.yaml
如果策略模版需要使用外部数据服务,需要在对应provider.yaml的caBundle字段配置ca.crt。证书生成参考 构建和部署 章节。
本节适用于测试或开发external data provider的场景,如果您的策略模版不需要使用外部数据服务,可以直接参考policys/下的策略模板定义和下发策略。
# 拉取代码
git clone https://github.com/AliyunContainerService/finops-gatekeeper-provider.git
cd finops-gatekeeper-provider
# 或使用 Docker 构建
docker build -t finops-gatekeeper-provider:v0.1 .
- 生成证书:
cd finops-gatekeeper-provider
bash ./scripts/generate-tls-cert.sh
- 创建证书secret:
kubectl create secret tls finops-external-data-secret -nkube-system --cert="./certs/tls.crt" --key="./certs/tls.key"
- 创建 RBAC 配置:
kubectl apply -f manifest/rbac.yaml
- 创建 ConfigMap:
# 配置注册的external data server
kubectl apply -f manifest/configmap.yaml
- 部署服务:
# 修改 manifest/deployment.yaml 为重新构建的镜像
kubectl apply -f manifest/deployment.yaml
kubectl apply -f manifest/service.yaml
- 应用策略模板:
# 应用所有策略模板
kubectl apply -f policies/validating/workload-budget/
kubectl apply -f policies/validating/workload-utilization/
kubectl apply -f policies/validating/recommendation/
External Data Server 支持通过 YAML 配置文件进行配置,默认查找 configmap 中的config.yaml
文件:
server:
port: 8090 # 服务端口
timeout: 300 # 请求超时时间(秒)
webhooks:
- name: "default-resources-mutator"
path: "/mutate/resources"
type: "mutating"
enabled: true
- name: "default-labels-mutator"
path: "/mutate/labels"
type: "mutating"
enabled: true
- name: "resources-validator"
path: "/validate/resources"
type: "validating"
enabled: true
- name: "labels-validator"
path: "/validate/labels"
type: "validating"
enabled: true
- name: "workload-budget-validator"
path: "/validate/workload-budget"
type: "validating"
enabled: true
- name: "workload-resource-utilization-validator"
path: "/validate/workload-resource-utilization"
type: "validating"
enabled: true
- name: "workload-recommendation-validator"
path: "/validate/workload-recommendation"
type: "validating"
enabled: true
prometheus:
url: "http://your-prometheus-url:9090/api/v1/query"
策略处理器根据名称自动映射:
策略名称模式 | 类型 | 功能描述 |
---|---|---|
*resources* |
mutating | 默认资源配置 Mutator |
*labels* |
mutating | 默认标签配置 Mutator |
*resources* |
validating | 资源配置 Validator |
*labels* |
validating | 标签配置 Validator |
*workload-budget* |
validating | 工作负载预算验证器 |
*workload-resource-utilization* |
validating | 资源利用率验证器 |
*workload-recommendation* |
validating | 工作负载推荐验证器 |
├── main.go # 主程序入口
├── config.yaml # 默认配置文件
├── pkg/
│ ├── config/ # 配置管理
│ ├── policy/ # 策略实现
│ ├── server/ # Webhook 服务器
│ └── utils/ # 工具函数
├── policies/ # 策略模板
│ ├── mutating/ # 变更策略
│ └── validating/ # 验证策略
└── manifest/ # Kubernetes 部署文件
- 在
pkg/policy/
中实现新的处理器 - 在
register.go
中注册处理器 - 更新配置文件添加新的策略配置
- 创建对应的策略模板(如需要)
本项目采用 Apache 2.0 许可证。