Skip to content

AliyunContainerService/finops-gatekeeper-provider

Repository files navigation

FinOps Gatekeeper Provider

FinOps Gatekeeper Provider 为 Open Policy Agent Gatekeeper 提供策略模版和外部数据服务,用于 FinOps 场景的 Kubernetes 资源管理和主动成本控制。

功能特性

核心功能

  • 外部数据提供: 为 Gatekeeper 提供实时成本、资源利用率等外部数据
  • 多策略支持: 支持 Mutating 和 Validating 策略
  • 动态配置: 可通过配置文件动态注册多个策略处理器

FinOps 场景策略模版

  • 工作负载预算控制: 防止工作负载扩容时超出成本预算
  • 资源利用率验证: 基于实际资源利用率控制扩容操作
  • 智能推荐验证: 验证资源推荐配置的有效性
  • 默认资源配置: 自动为容器设置合理的资源请求和限制
  • 标签管理: 基于指定标签的准入策略
  • 更多策略补充中

策略管理

策略模版定义和下发策略,请参考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 .

部署

  1. 生成证书:
cd finops-gatekeeper-provider
bash ./scripts/generate-tls-cert.sh
  1. 创建证书secret:
kubectl create secret tls finops-external-data-secret -nkube-system --cert="./certs/tls.crt" --key="./certs/tls.key"
  1. 创建 RBAC 配置:
kubectl apply -f manifest/rbac.yaml
  1. 创建 ConfigMap:
# 配置注册的external data server
kubectl apply -f manifest/configmap.yaml
  1. 部署服务:
# 修改 manifest/deployment.yaml 为重新构建的镜像
kubectl apply -f manifest/deployment.yaml
kubectl apply -f manifest/service.yaml
  1. 应用策略模板:
# 应用所有策略模板
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 部署文件

添加新的策略处理器

  1. pkg/policy/ 中实现新的处理器
  2. register.go 中注册处理器
  3. 更新配置文件添加新的策略配置
  4. 创建对应的策略模板(如需要)

许可证

本项目采用 Apache 2.0 许可证。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •