Kyverno[1] 是一个为 Kubernetes 打造的策略管理引擎:
注意:你的 Kubernetes 集群版本必须高于 v1.14,它增加了 webhook 超时。
直接使用下面的命令即可安装 Kyverno:
kubectl create -f [https://raw.githubusercontent.com/kyverno/kyverno/master/definitions/release/install.yaml](https://raw.githubusercontent.com/kyverno/kyverno/master/definitions/release/install.yaml "https://raw.githubusercontent.com/kyverno/kyverno/master/definitions/release/install.yaml")
当然我们也可以使用 Helm Chart 来快速安装 kyverno。
然后添加下面的策略,它包含一个验证规则,要求所有的 pod 都有一个 app.kubernetes.io/name
标签,Kyverno 支持不同的规则类型来 validate、mutate 和生成配置,策略属性 validationFailureAction
被设置为强制执行,以阻止不合规的 API 请求(使用默认值 audit 会报告违规行为,但不会阻止请求)。
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-labels
spec:
validationFailureAction: enforce
rules:
- name: check-for-labels
match:
resources:
kinds:
- Pod
validate:
message: "label `app.kubernetes.io/name` is required"
pattern:
metadata:
labels:
app.kubernetes.io/name: "?*"
创建了上面的策略资源后,我们可以尝试创建一个不带有上面指定标签的应用:
kubectl create deployment nginx --image=nginx
我们会看到如下所示的一些错误提示信息:
Error from server: admission webhook "nirmata.kyverno.resource.validating-webhook" 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;
Validation rule autogen-check-for-labels failed at path /spec/template/metadata/labels/app.kubernetes.io/name/'
如果我们创建一个带有所需要标签的 Pod,则可以正常创建,比如下面的资源清单:
kind: "Pod"
apiVersion: "v1"
metadata:
name: nginx
labels:
app.kubernetes.io/name: nginx
spec:
containers:
- name: "nginx"
image: "nginx:latest"
因为这个 Pod 符合我们定义的策略规则,所以不会被拦截。
可以通过删除所有的集群策略来进行清理:
kubectl delete cpol --all
接下来我们可以通过查看策略示例[2]来学习如何编写策略规则[3],此外我们还可以使用 Kyverno CLI[4] 工具来测试定义的策略。
当然在 Kubernetes 社区中还有很多类似的策略管理引擎可以作为 Kyverno 的替代品:
关注微信公众帐号,后台回复
kyverno
获取 kyverno 介绍 PPT。
[1]
Kyverno: https://kyverno.io/
[2]
策略示例: https://github.com/kyverno/kyverno/blob/master/samples/README.md
[3]
编写策略规则: https://github.com/kyverno/kyverno/blob/master/documentation/writing-policies.md
[4]
Kyverno CLI: https://github.com/kyverno/kyverno/blob/master/documentation/kyverno-cli.md
[5]
开放策略代理(OPA): https://www.openpolicyagent.org/
[6]
Rego: https://www.openpolicyagent.org/docs/latest/how-do-i-write-policies#what-is-rego
[7]
k-rail: https://github.com/cruise-automation/k-rail/
[8]
Polaris: https://github.com/reactiveops/polaris
K8S进阶训练营,点击下方图片了解详情