使用Kyverno自动标记Kubernetes资源

你填了吗?git

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

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

Image

问卷连接(https://www.wjx.cn/jq/9714648...docker


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

介绍安全

随着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微信公众号。
image

相关文章
相关标签/搜索