环境要求
gatekeeper是基于k8s的 admission controller webhooks实现的,需要k8s的 kube-apiserve开启相应的准入控制,也就是 validating admission webhook和mutating admissionwebhook.
- 关于admission controller webhooks可以参考:链接
- kube-apiserver每个参数的含义:链接
- admission controller的介绍:链接
开启方式描述如下:
- 针对二进制安装kube-apiserver的集群,可以直接修改kube-apiserver的启动参数,在目前的环境中(kube-apiserver是使用二进制安装在mater上的),修改方式如下
- 登录到k8s的master节点上
- 修改/etc/default/kube-apiserver文件,修改“–admission-control”的参数值 ,加上“MutatingAdmissionWebhook, ValidatingAdmissionWebhook”,注意添加顺序
- 重启kube-apiserver, service kube-apiserver restart
gatekeeper安装
另外也可以直接使用kubectl get crd的方式,查看对于的crd的AGE是不是
,只有当AGE不为
而是一个数字时,才表示这个资源对象可用
相关链接:github issuce
gatekeeper是否支持warn级别的约束
不支持,这种不支持是因为gatekeeper是基于k8s的admission来实现的,具体可以看 github issuce
如何实现细粒度的约束控制
在 gatekeeper中,如果你想将某些约束应用在部分资源对象,诸如命名空间或者Pod的话,可以配置spec. match
如何获取约束的审计信息
如果出现约束部署成功了,但是不起作用或者 status没有显示的情况,可能原因
- constraints的yam文件拼写出错,诸如 apiGroups打错
- 没有添加资源对象的spec.match,或者 spec.match添加错误,特别是 apiGroups
如果部署模板CRD之后,使用 kubectl get crd没有看到新建的模板
这种情况多半就是模板的rego语法出错了,可以先使用 kubectl get ConstraintTemplate取模板CRD名称,再 kubectl get ConstraintTemplate
-o yam获取 status查看语法出错的位置
gatekeeper的Policy里面的rego语法
要写这种语法,建议就是把相关的资料都看一次,然后参考官方的来写。
学习链接有:
- https://www.openpolicyagent.org/docs/latest/policy-language/
- https://www.openpolicyagent.org/docs/latest/policy-reference/#built-in-functions
- https://github.com/open-policy-agent/frameworks/tree/master/constraint
可以参考的例子有:
- https://github.com/ritazh/gatekeeper/tree/master/demo
- https://github.com/open-policy-agent/gatekeeper/tree/master/demo
- https://github.com/open-policy-agent/gatekeeper/tree/master/library/general
另外就是上Slack跟opa项目的人交流了
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/198297.html原文链接:https://javaforall.net
