集群一多,规矩就得写成代码:聊聊 OPA / Gatekeeper / Kyverno 在多集群里的真实用法

简介: 集群一多,规矩就得写成代码:聊聊 OPA / Gatekeeper / Kyverno 在多集群里的真实用法

集群一多,规矩就得写成代码:聊聊 OPA / Gatekeeper / Kyverno 在多集群里的真实用法

作者:Echo_Wish
一个被“这个集群怎么又不一样了”逼疯过的运维人


一、多集群最怕的不是多,是“各干各的”

先问你一个问题,你一定有共鸣:

同样是 Kubernetes,
为什么 A 集群能跑,B 集群直接被打回?

我见过太多现场:

  • 这个集群允许 latest 镜像
  • 那个集群强制 resource limit
  • 测试集群能用特权容器
  • 生产集群一上来就炸

于是最后变成一句话总结:

K8s 是统一的,但“人心”是散的

当集群只有一个时,靠口头规范 + Wiki + 运维自觉还能勉强维持;
一旦到了多集群,靠人记规则,必死。

这就是 Policy as Code 出现的背景。


二、什么是 Policy as Code?别被名词吓住

我用一句大白话解释:

把“不能做什么、必须怎么做”,交给系统,而不是靠人盯

以前是:

  • 文档写一堆
  • 群里喊一嗓子
  • 出事了再复盘

现在是:

  • YAML 一提交
  • API Server 直接拦
  • 想违规?门都没有

在 Kubernetes 里,这个“拦”的位置,就是 Admission Controller


三、OPA / Gatekeeper / Kyverno,别一上来就选,先搞清楚定位

1️⃣ OPA(Open Policy Agent)——底层发动机

OPA 是什么?

  • 一个通用策略引擎
  • 使用 Rego 语言
  • 不只 Kubernetes 能用

它很强,但也很“原始”。

package kubernetes.admission

deny[msg] {
  input.request.kind.kind == "Pod"
  not input.request.object.spec.containers[_].resources.limits
  msg := "容器必须设置 resources.limits"
}

👉 我的真实感受:

OPA 很强,但直接用 OPA 写 K8s 策略,心智成本不低


2️⃣ Gatekeeper —— OPA 的 K8s 官方形态

Gatekeeper = OPA + K8s 友好封装

优点很明显:

  • CRD 形式管理策略
  • 和 K8s 生态融合好
  • 适合做强约束(硬门槛)

一个典型例子:
禁止使用 latest 镜像

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sDisallowLatestTag
metadata:
  name: no-latest-tag
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]

👉 Gatekeeper 给我的感觉是:

像“交警”,只负责拦违规,不负责教你怎么开车


3️⃣ Kyverno —— 为 Kubernetes 而生的策略工具

Kyverno 的一句官方口号我很认同:

Policy as Code, but YAML-first

你不需要 Rego,只写 YAML。

比如:
自动给所有 Pod 加 resource limit

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: add-resource-limits
spec:
  rules:
    - name: set-default-limits
      match:
        resources:
          kinds:
            - Pod
      mutate:
        patchStrategicMerge:
          spec:
            containers:
              - (name): "*"
                resources:
                  limits:
                    cpu: "500m"
                    memory: "512Mi"

👉 我个人的评价很直接:

Kyverno 更像“运维友好型工具”


四、多集群场景下,Policy as Code 真正的痛点在哪?

很多文章只讲“能不能做”,
多集群真正的难点是:

1️⃣ 策略怎么统一?

你一定会遇到:

  • 测试集群宽松
  • 预发集群中等
  • 生产集群最严

如果你每个集群一套策略:

恭喜你,维护成本直接爆炸

我的建议是:

  • 一份策略代码
  • 通过参数 / label 控制生效范围
match:
  resources:
    namespaces:
      - prod-*

2️⃣ 策略升级怎么不“误伤”?

策略不是写完就完了,
策略本身也是代码,有 bug。

我踩过最狠的一个坑是:

策略上线 → 所有 Deployment 发布失败

解决方案只有一个:

👉 策略也要走灰度

  • 先 audit(只记录不拦)
  • 再 enforce(强制执行)

Gatekeeper / Kyverno 都支持。


3️⃣ 多集群下的策略分发问题

现实世界里:

  • 10 个集群
  • 3 套环境
  • N 套业务

你不可能手工 apply。

我的实践经验是:

Policy as Code + GitOps 是绝配

  • 策略进 Git
  • Argo CD / Flux 统一下发
  • 集群只是执行者

五、我心目中“成熟”的多集群策略体系长这样

给你一个真实可落地的参考模型:

policy-repo/
├── base/
│   ├── no-privileged.yaml
│   ├── require-labels.yaml
├── env/
│   ├── prod/
│   ├── staging/
│   └── test/
├── overlays/
│   ├── finance/
│   └── core-service/

核心思想就一句话:

策略像代码一样分层、复用、可演进


六、说点不那么“官方”的真心话

写到这,我想说点心里话。

Policy as Code 不是为了:

  • 为难开发
  • 显得运维很牛
  • 堆工具

它真正解决的是一个老问题:

当规模上来后,如何用系统对抗人的不确定性

如果你现在还在靠:

  • 群公告
  • 文档约定
  • 事后追责

那不是你不努力,
而是工具已经该升级了


七、写在最后

我越来越坚信一件事:

多集群不是技术问题,是治理问题

而 Policy as Code,
就是运维在规模化时代,
为自己争取“可控性”的最后一道防线。

如果你问我一句建议,我会说:

  • 集群 < 3:Kyverno 起步
  • 多环境多集群:Gatekeeper + GitOps
  • 想做统一治理:OPA 作为底层能力
目录
相关文章
|
边缘计算 JSON 物联网
解锁业务灵活性:RuleGo规则引擎的高效解耦与实时响应秘籍
RuleGo是一个基于Go语言的轻量级、高性能规则引擎,旨在通过动态规则链和组件化设计,简化复杂系统的业务逻辑管理和实时响应。
解锁业务灵活性:RuleGo规则引擎的高效解耦与实时响应秘籍
|
存储 运维 Kubernetes
【深度】阿里巴巴万级规模 K8s 集群全局高可用体系之美
台湾作家林清玄在接受记者采访的时候,如此评价自己 30 多年写作生涯:“第一个十年我才华横溢,‘贼光闪现’,令周边黯然失色;第二个十年,我终于‘宝光现形’,不再去抢风头,反而与身边的美丽相得益彰;进入第三个十年,繁华落尽见真醇,我进入了‘醇光初现’的阶段,真正体味到了境界之美”。
【深度】阿里巴巴万级规模 K8s 集群全局高可用体系之美
|
Kubernetes API 调度
【k8s系列5】KubernetesClientException: too old resource version 原因分析
【k8s系列5】KubernetesClientException: too old resource version 原因分析
2009 0
|
8月前
|
搜索推荐 算法 Go
Go语言实战案例-快速排序实现
快速排序是一种高效的排序算法,平均时间复杂度为O(n log n),采用分治法实现,适合递归教学与工程实践。本文介绍了快速排序的基本原理、Go语言实现方式、泛型扩展及使用示例,帮助读者掌握其核心思想与应用技巧。
|
弹性计算 固态存储 开发者
阿里云99元服务器,性价比之王!新老用户都值得拥有!
阿里云99元服务器ECS经济型e实例,2核2G配置,3M固定带宽,40G ESSD Entry系统盘,适合个人开发者、学生和小微企业用于中小型网站建设和轻量级应用。CPU基于Intel Xeon Platinum架构,网络带宽支持最高2Gbps突发,云盘提供0.8万IOPS。3M带宽下载速度达384KB/s,上传速度1280KB/s,不限流量。续费仍为99元/年
922 0
|
运维 安全 关系型数据库
​​国内 5 个最佳的控制面板,可轻松管理服务器
在当今数字化飞速发展的时代,Linux 服务器作为众多企业和开发者的核心基础设施,其管理的高效性和专业性成为了保障业务稳定运行的关键因素。对于专业的服务器运维人员和开发团队而言,理解这些面板的细节差异至关重要。这不仅关乎服务器管理的效率,更涉及到系统的稳定性、安全性以及对开源应用生态的适应性。期望本次全面的盘点能为您的 Linux 服务器管理策略提供坚实的理论依据和实践指导,确保服务器管理工作在技术迭代和业务发展的浪潮中保持高效、稳定且安全的运行状态。
​​国内 5 个最佳的控制面板,可轻松管理服务器
|
缓存 监控 Java
解决 Groovy 引起的一次 OOM 告警
线上OOM告警了,一个简单的case演示如何分析和解决。
320 2
|
存储 Kubernetes 算法
【K8S系列】深入解析etcd
【K8S系列】深入解析etcd
852 0
go接口定义、实现、多态
go接口定义、实现、多态
284 4
|
缓存 安全 网络安全
【内网安全】横向移动&NTLM-Relay重放&Responder中继攻击&Ldap&Ews
【内网安全】横向移动&NTLM-Relay重放&Responder中继攻击&Ldap&Ews
457 0