火了!Kubernetes 原生策略管理,用它就够了

Kyverno 是为 Kubernetes 设计的策略引擎。它可以使用准入控制和后台扫描来验证、改变和生成配置。Kyverno 策略是 Kubernetes 资源,不需要学习新语言。Kyverno 旨在与您已经使用的工具(如 kubectl、kustomize 和 Git)很好地协同工作。火了!Kubernetes 原生策略管理,用它就够了

功能

  • 策略作为 Kubernetes 资源(无需学习新语言!)
  • 验证、改变、生成或清理(删除)任何资源
  • 为软件供应链安全验证容器镜像
  • 检查图像元数据
  • 使用标签选择器和通配符匹配资源
  • 使用叠加层验证和变异(比如 Kustomize!)
  • 跨命名空间同步配置
  • 使用准入控制阻止不符合要求的资源,或报告违反政策的行为
  • 自助服务报告(没有专有审计日志!)
  • 自助服务政策例外
  • 在应用到集群之前,在 CI/CD 管道中使用 Kyverno CLI 测试策略和验证资源
  • git使用熟悉的工具(例如和)将策略作为代码进行管理kustomize

Kyverno 允许集群管理员独立于工作负载配置管理环境特定配置,并为其集群实施配置最佳实践。Kyverno 可用于扫描现有工作负载以获得最佳实践,或者可用于通过阻止或改变 API 请求来实施最佳实践。

工作原理

Kyverno 在 Kubernetes 集群中作为动态准入控制器运行。Kyverno 从 kube-apiserver 接收验证和改变准入 webhook HTTP 回调,并应用匹配策略返回执行准入策略或拒绝请求的结果。

Kyverno 策略可以使用资源种类、名称、标签选择器等来匹配资源。

可变策略可以编写为覆盖(类似于 Kustomize)或编写为 RFC 6902 JSON 补丁。验证策略还使用覆盖样式语法,支持模式匹配和条件(if-then-else)处理。

使用 Kubernetes 事件捕获策略实施。Kyverno 还报告现有资源的策略违规。

下图显示了 Kyverno 的高层架构火了!Kubernetes 原生策略管理,用它就够了Kyverno 的高可用性安装可以运行多个副本,每个 Kyverno 副本将有多个执行不同功能的控制器。处理来自 Kubernetes API 服务器的请求,其组件创建和管理所需Webhook的配置。监视策略资源并根据配置的扫描间隔启动后台扫描。管理生成资源的生命周期。AdmissionReviewMonitorPolicyControllerGenerateController

快速开始

Kubernetes 集群版本必须高于 v1.14,这增加了 webhook 超时。检查兼容性矩阵以确保 Kubernetes 版本受支持。要检查版本,请输入kubectl version.

可以选择直接从最新版本清单或使用 Helm 安装 Kyverno。发布清单只能用于测试目的;推荐使用 Helm 进行生产。

使用特定版本安装 Kyverno:

kubectl create -f https://github.com/kyverno/kyverno/releases/download/v1.8.5/install.yaml

还可以使用 Helm 安装 Kyverno:

# Add the Helm repository
helm repo add kyverno https://kyverno.github.io/kyverno/

# Scan your Helm repositories to fetch the latest available charts.
helm repo update

# Install the Kyverno Helm chart into a new namespace called "kyverno"
helm install kyverno kyverno/kyverno -n kyverno --create-namespace

将以下策略添加到集群。它包含一个验证规则,要求所有 Pod 都有一个 app.kubernetes.io/name 标签。Kyverno 支持不同的规则类型来验证、变异、生成、清理和验证图像配置。policy 属性 validationFailureAction 设置为 Enforce 阻止不合规的 API 请求(使用默认值 Audit 将报告违规但不会阻止请求。)

kubectl create -f- << EOF
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: require-labels
spec:
  validationFailureAction: Enforce
  rules:
  - name: check-for-labels
    match:
      any:
      - resources:
          kinds:
          - Pod
    validate:
      message: "label 'app.kubernetes.io/name' is required"
      pattern:
        metadata:
          labels:
            app.kubernetes.io/name: "?*"
EOF

尝试创建一个没有所需标签的 Deployment:

kubectl create deployment nginx --image=nginx

应该会看到一个错误:

error: failed to create deployment: admission webhook "validate.kyverno.svc-fail" denied the request:

resource Deployment/default/nginx was blocked due to the following policies

require-labels:
  autogen-check-for-labels: 'validation error: label ''app.kubernetes.io/name'' is
    required. Rule autogen-check-for-labels failed at path /spec/template/metadata/labels/app.kubernetes.io/name/'

Kyverno 可以配置为排除系统命名空间,如 kube-system 和 kyverno。确保在用户定义的命名空间或 default 命名空间(仅测试)中创建部署。

尽管 ClusterPolicy 匹配 Pod,但 Kyverno 智能地将其应用于默认情况下能够生成 Pod 的所有源,包括上面的 Deployment。

创建具有所需标签的 Pod。例如,使用此命令:

kubectl run nginx --image nginx --labels app.kubernetes.io/name=nginx

此 Pod 配置符合策略,未被阻止。

通过删除所有集群策略进行清理:

kubectl delete cpol --all


传送门

开源协议:Apache-2.0 license

开源地址:https://github.com/kyverno/kyverno

项目合集:https://github.com/OpenTechCol/OpenTechCol

「回复【加群】加入开源技术交流群,干货很多!」

-END-


原文始发于微信公众号(开源技术专栏):火了!Kubernetes 原生策略管理,用它就够了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/145720.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!