使用Kyverno自动标记Kubernetes资源

你填了吗?

10人将获赠CNCF商店$100美元礼券!

来参与2020年CNCF中国云原生调查

Image

问卷链接(https://www.wjx.cn/jq/97146486.aspx


客座文章作者:Nirmata业务发展和客户成功副总裁Anubhav Sharma,最初在Nirmata的博客上发表。

介绍

随着Kubernetes已经成为企业转向云原生的基本构建块,过去几年已经出现了许多简化集群创建过程的解决方案。但是,Kubernetes周边的Day-2运营仍然是一个复杂的过程,会减缓采用速度,增加运营成本。Kubernetes的复杂性和技能差距仍然是阻碍企业采用Kubernetes的最大因素。

许多Day-2操作用例包括要求中央平台团队尽可能有效地向开发人员交付安全和兼容的环境,并预先配置必要的服务和最佳实践。这类用例的一些例子包括使用Kubernetes最佳实践(如资源配额、网络策略和pod安全性)来配置环境。这需要工具在环境创建时进行评估,然后按照中央平台团队定义的标准对环境进行配置。

Kyverno:一个针对K8s的灵活的操作工具

Kubernetes提供了强大的构造,如准入控制webhook,可以用于验证和更改资源。Nirmata的Kyverno是专门设计用来使用声明式范式处理这些类型的用例的。Kyverno是一个为Kubernetes设计的开源策略引擎,它为用户提供了熟悉的结构来编写定制规则,并可根据需要轻松实现验证、修改和生成新资源。

大规模地管理Kubernetes需要遵循最佳实践和跨配置应用标准化。其中一种模式是使用Kubernetes标签。在Kubernetes中,每个资源都可以有一个或多个标签,Kubernetes使使用标签查找和管理资源变得很容易。

Day-2操作的一个非常常见的用例是跨命名空间和pod管理标签,以便其他Kubernetes控制器和操作人员可以轻松地实现证书更新、自助日志/监控、备份等用例。

自动标记命名空间

下面是一个使用Kyverno在Kubernetes集群中创建命名空间时如何实现命名空间标记的示例。

在集群中安装Kyverno:

kubectl create -f https://github.com/kyverno/kyverno/raw/master/definitions/install.yaml

这里有详细的安装说明

下面是一个向命名空间添加标签的示例Kyverno策略:

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata: 
 name: add-labels
spec: 
 background: false
 rules:
 - name: add-ns-label
 match:
 resources:
 kinds: 
 - Namespace
 exclude:
 clusterroles: ["cluster-admin"]
 mutate: 
 patchStrategicMerge:
 metadata:
 labels:
 kyverno/user: "{{ request.userInfo.username }}"
 +(kyverno/network): "default"

该策略插入一个标签’kyverno/user’,其中包含发出API请求以创建命名空间的用户的值。该策略还会插入一个标签’kyverno/network’,但只有在用户尚未指定标签时才会如此。这个简单的策略演示了Kyverno中的一些强大功能,如变量替换条件锚

在集群中配置了策略之后,创建一个新的命名空间,并自动验证标签已经添加到该命名空间。

创建一个新的命名空间:

kubectl create ns test

查看命名空间:

kubectl get ns test -o yaml

这应该显示类似于:

apiVersion: v1
kind: Namespace
metadata:
 labels:
 kyverno/network: default
 kyverno/user: docker-for-desktop

现在,如果你想确保用户不能更新特定的标签,该怎么办呢?

Kyverno也让这很容易做到!以下是一个阻止“kyverno/network”标签更新的策略:

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
 name: protect-label
spec:
 validationFailureAction: enforce
 background: false
 rules:
 - name: block-updates-for-label
 match:
 resources:
 kinds:
 - Namespace
 validate:
 message: Updating label `kyverno/network` is not allowed
 deny:
 - key: "{{ request.operation }}"
 operator: "EQUALS"
 value: UPDATE

总结

管理Kubernetes配置可能很复杂,策略引擎提供了标准化、自动验证以及更改和生成配置的能力。

Kyverno是一个为Kubernetes设计的开源政策引擎。它具有最小的学习曲线,并为Kubernetes管理员提供了极大的灵活性,可以使用Kubernetes强大的声明式管理功能和原生工具解决Day-2操作挑战。

了解Kyverno还可以做什么请到:

https://kyverno.io

点击阅读网站原文


CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux Foundation,是非营利性组织。
CNCF(云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。扫描二维码关注CNCF微信公众号。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值