集群一多,规矩就得写成代码:聊聊 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 作为底层能力
目录
相关文章
|
存储 监控 Kubernetes
k8s诊断之记一次pod oom的异常shmem输出
客户反馈java设置xms,xmx参数固定8G内存,而pod的limit则为16G, 三番五次出现了pod oom的情况,且oom的时候他的业务进程输出也是8g, 同时promethus的监控对应pod的working_set_memory也是8个多g, 剩下的几个g的内存到底去哪里了呢?
5195 1
k8s诊断之记一次pod oom的异常shmem输出
|
存储 运维 Kubernetes
【深度】阿里巴巴万级规模 K8s 集群全局高可用体系之美
台湾作家林清玄在接受记者采访的时候,如此评价自己 30 多年写作生涯:“第一个十年我才华横溢,‘贼光闪现’,令周边黯然失色;第二个十年,我终于‘宝光现形’,不再去抢风头,反而与身边的美丽相得益彰;进入第三个十年,繁华落尽见真醇,我进入了‘醇光初现’的阶段,真正体味到了境界之美”。
【深度】阿里巴巴万级规模 K8s 集群全局高可用体系之美
|
Kubernetes API 调度
【k8s系列5】KubernetesClientException: too old resource version 原因分析
【k8s系列5】KubernetesClientException: too old resource version 原因分析
2220 0
|
9月前
|
弹性计算 运维 安全
阿里云CNAPP云安全中心全解析:优势、费用、合规及使用一文说透
阿里云CNAPP(智能云原生应用保护平台)整合CWPP、CSPM、CIEM与CTDR四大能力,提供覆盖“事前-事中-事后”的全链路安全防护。支持多云统一管理,内置380+检测模型,具备等保、ISO、PCI DSS等20+合规认证,助力企业实现一体化、智能化安全运营。免费版开放基础功能,高级版按需付费,新用户享15天全功能试用,快速构建云上安全防线。
|
6月前
|
数据可视化 前端开发 定位技术
可视化数据实现(一)
教程来源 https://hllft.cn/category/artificial-intelligence.html 在数据驱动时代,数据可视化借力视觉认知(快文本6万倍),将复杂信息秒级传达。本文系统讲解理论、工具(ECharts/D3)、图表实现与交互设计,助你从零构建专业可视化应用。
|
8月前
|
安全 Linux 网络安全
Metasploit Framework 6.4.113 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.113 (macOS, Linux, Windows) - 开源渗透测试框架
377 5
Metasploit Framework 6.4.113 (macOS, Linux, Windows) - 开源渗透测试框架
|
10月前
|
算法 搜索推荐 定位技术
《独立游戏社区支持的生态构建与共创赋能指南》
本文聚焦独立游戏项目如何依托自有网站构建高粘性社区支持生态,指出网站并非传统展示窗口,而是连接开发者与玩家的价值共生枢纽。文章结合实践路径,提出需打破单向信息输出模式,通过场景化互动设计、“研发温度+玩家价值”双轨内容体系、分层参与机制,让玩家从体验者转变为共建者。同时强调透明化反馈处理与常态化互动的核心作用,主张搭建线上线下联动的立体生态,整合社区资源,最终实现开发者与玩家的价值共生,为缺乏大厂资源的独立游戏项目,提供破圈突围的切实可行路径。
501 10
|
存储 安全 Java
Git历史数据清理:运用BFG删除敏感信息。
通过使用BFG Repo-Cleaner,你可以确保你的Git历史记录自由于敏感数据,而不需要为手动清理每一个提交而烦恼。不仅如此,BFG的效率极高,对于大型的存储库和长期的提交历史,其表现出色,即使在处理数万个提交和GB级别的数据时,也能快速和有效的清理Git历史。
516 34
|
弹性计算 固态存储 开发者
阿里云99元服务器,性价比之王!新老用户都值得拥有!
阿里云99元服务器ECS经济型e实例,2核2G配置,3M固定带宽,40G ESSD Entry系统盘,适合个人开发者、学生和小微企业用于中小型网站建设和轻量级应用。CPU基于Intel Xeon Platinum架构,网络带宽支持最高2Gbps突发,云盘提供0.8万IOPS。3M带宽下载速度达384KB/s,上传速度1280KB/s,不限流量。续费仍为99元/年
1209 0
|
缓存 Java 测试技术
RecyclerView 优化—滑动性能提升
RecyclerView 优化—滑动性能提升
926 0

热门文章

最新文章