您现在的位置是:热点 >>正文
使用Webhook为Kubernetes实现基于标签的权限控制
热点31924人已围观
简介...
Kubernetes支持名称空间级别的权限控制。但是,有时这不能满足我们的要求。例如,在Akraino ICN项目中,我们有一些高级权限要求:多个用户可以在同一名称空间中创建,更新或删除一种资源,但不能更新或删除其他人创建的对象。
为了满足这一要求,我们使用Webhook在Kubernetes中设计并实现了基于标签的权限控制机制。通常,webhooks用于验证资源或设置资源的默认值。在本文中,我们使用webhook来控制权限。
许可系统的设计
在Kubernetes中,用户或服务帐户可以绑定到一个或多个角色。每个角色定义其权限规则。例如,以下定义要求sdewan-test角色可以在默认名称空间中创建或更新类型为Mwan3Rule的自定义资源实例(CR),并且可以获取Mwan3Policy CR。
apiVersion: rbac.authorization.k8s.io/v1 kind: Role 使用metadata: Annotations: name: sdewan-test namespace: default rules: - apiGroups: - "" resources: - mwan3rules verbs: - create - update - apiGroups: - "" resources: &nbWesp;- mwan3policies verbs: - get
我们使用json格式的注释sdewan-bucket-type-permission扩展了角色。
在注释中,我们可以定义基于标签的权限。例如,下面显示的角色扩展了sdewan-test角色权限:sdewan-test只能创建/更新带有标签sdewan-bucket-type=app-intent或sdewan-bucket-type=k8s-service的Mwan3Rule(json键指定自定义资源类型)CR。而且它只能获得带有标签sdewan-bucket-type=app-intent的Mwan3Policy CR。
实际上,我们也支持通配符匹配。例如,我们可以使用mwan3*来同时匹配mwan3policies和mwan3rules。
apiVersion: rbhbac.authorization.k8s.io/v1 kind: Role metadata: annotations: sdewan-bucket-type-permission: |- { "mwan3rules": ["app-intent", "k8s-service"], "mwan3policies": ["app-intent"] } name: sdewan-test namespace: default rules: - apiGroups: - "" resouoorces: - mwan3rules verbs: - create - update - apiGroups: - "" resources: - mwan3policies verbs: - get
Kubernetes Webhook负责解析角色注释。让我用简单的词来描述什么是准入webhook。我们可以将webhook视为Web服务,通常它在Kubernetes集群中作为pod运行。
当Kubernetes api收到请求时,kube-api可以在将对象保存到etcd中之前调用webhook API。如果webhook返回allowed=true,则kube-api继续将对象持久保存到etcd中。否则,kube-api拒绝该请求。
Webhook请求主体具有k为一个名为userInfo的字段,该字段指示谁在发出Kubernetes api请求。从用户信息中,webhook可以获取角色信息,然后获取角色注释。通过将注释中描述的标签级别权限与CR标签进行比较,webhook可以决定是否允许该请求。
实施权限控制系统
我们已经通过Akraino ICN项目中的kubebuilder框架实现了基于标签的权限系统。这里的假设是已经实现了一些自定义资源定义(CRD)(例如Mwan3Policy和Mwan3Rule)和相应的控制器。
Kubebuilder可以生成基本的CRD,控制器代码和Webhook代码。要创建一个新的webhook,我们运行以下kubebuilder命令:
kubebuilder create webhook --group batch --version v1 --kind CronJob --progKurammatic-validation
此命令利用controller-runtime builder来创建验证Webhook。该命令还会创建webhook server,该server接受来自kube-api服务器的https请求。它甚至生成解析http请求正文并将其转换为CRD结构实例的代码。
开发人员只需要编写代码来验证CRD实例内容。这对于大多数Webhook情况都是有用的。但这不能满足我们的要求,因为我们需要位于https请求正文中的UserInfo而不是CRD实例。
我们重用了kubebuilder生成的webhook server,但自己实现了处理程序。上图显示了处理程序的处理流程。处理程序接受“ admission.Request”作为输入,其中包含UserInfo。在处理程序中,我们获得用户角色信息和CR标签。
获取用户角色信息。
userinfo在请求正文中。为了从userinfo获取角色信息,处理程序必须向kube-abepi请求用户的角色信息。处理程序使用serviceaccount令牌作为身份验证将请求发送到kube-api。首先,处理程序发送一个请求以获取用户的角色绑定信息。然后,它发送第二个请求以从角色绑定信息中获取角色信息。默认情况下,角色绑定资源在“ .subjects”字段上没有索引器,这意味着我们无法在kube-api请求中过滤角色绑定,除非我们为角色绑定添加以下索引器:
err = mgr.GetFieldIndexer().IndexField(context.Background(), &rbacv1.RoleBinding{}, ".subjects", func(rawObj runtime.Object) []string { var fieldValues []string rolrnebinding := rawObj.(*rbacv1.RoleBinding) for _, subject := range rolebinding.Subjects { if subject.Kind == "ServiceAccount" { fieldValues = append(fieldValues, fmt.Sprintf("system:etserviceaccount:%s:%s", subject.Namespace, subject.Name)) } else { fieldValues = append(fieldValues, subject.Name) } } return fieldValues 获取CR信息
来自用户的请求可能是es创建,更新或删除资源。对于创建或更新请求,处理程序从请求正文中提取CR信息。对于删除请求,处理程序只能获取CR名称,而不能获取整个实例。因此需要调用kube-api来获取CR信息
考虑角色和ClusterRole
除了角色外,还可以在ClusterRole中定义用户权限。区别在于,角色始终在单个名称空间中定义权限,而ClusterRole可以在整个群集中定义权限。因此,我们还需要检查ClusterRole中的注释。解析角色信息时,我们只关心与CR具有相同名称空间的角色。
测试与实验
现在,我要介绍如何测试和试验基于标签的权限。在ICN中,此功能是通过kubebuilder与某些CRD/控制器一起开发的。Webhook支持https,但不支持http。因此,我们需要Webhook server的认证。
我们使用cert-manager插件来填充Webhook server的证书。同时,我们还将证书注入到webhook配置中,以便kube-ap实现i在发送webhook请求时可以使用证书。对于开发或本地测试用例,其中Webhook从本地而不是Pod运行,我们需要手动配置证书。
一旦建立了网络连接,我们就可以为测试创建角色和角色绑定。让我们创建以下角色并将其绑定到用户。
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: create-intent annotations: sdewan-bucket-type-permission: |- { "mwan3policies": ["app-intent"] } rule基于s: - apiGroups: ["batch.sdewan.akraino.org"] resources: ["mwan3policies"] verbs: ["get", "watch", "list", "delete", "create"]
允许用户创建标签为“sdewan-bucket-type:app-intent”的mwan3policies,但不能创建其他标签。这里一个具体的例子是,用户可以创建下面左边的CR,而不是下面右边的CR。
如果我们尝试创建下面右边的CR,则会收到错误消息“Error from server (Your roles don't have the permission): error when creating "config/samples/batch_v1alpha1_mwan3policy.标签yaml"。
结论
Webhook是kubernetes的一个很好的功能,它赋予kubernetes更大的灵活性。开发人员可以使用它来实现许多有用的功能。
Controller-runtime项目提供了builder工具,通过它我们可以轻松创建两种类型的Webhook:验证Webhook和Mutating Webhook。验证Webhook用于验证kube-api的资源,而Muting Webhook可以更新资源字段的值,例如设置默认值。
有时,这两种类型的Webhook都不符合我们的要求。例如,在本文中,我们需要获取不在资源正文中的userinfo。在这种情况下,我们需要自行开发大多数处理程序代码,而不是使用builder工具。
参考链接:
Kubebuilder book: https://book.kubebuilder.io/introduction.html
Controller-runtime doc: https://github.com/的权kubernetes-sigs/controller-runtime/blob/master/pkg/doc.go
Akraino SDEWAN agent design: https://wiki.akraino.org/display/AK/Sdewan+config+Agent
Label based permission control patch: https://gerrit.akraino.org/r/c/icn/sdwan/+/3509
*本文部分内容翻译自https://01.org/kubernetes/blogs/chengli3/2020/implement-label-based-permission-control-kubernetes-using-webhook,如有侵权请联系删除
Tags:
相关文章
标签: 中国移动 Token办公室 词元套餐 AlibabaTokenHub
热点云梦级6月30日云梦级消息,据报道,中国移动于近日正式设立 Token 办公室,该部门为集团级战略机构,级别高于此前成立的算力办公室,由集团核心领导直接挂帅督战,战略发展部总经理出任 Token 办公...
【热点】
阅读更多为什么 Kubernetes 要替换 Docker
热点为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响...
【热点】
阅读更多Anthropic 未来三年或将迎来收入狂飙,2026年年化收入可能高达260亿美元!
热点根据近期消息,人工智能公司 Anthropic 预计到 2026 年,其年化收入可能达到惊人的 260 亿美元。这一数字反映了该公司在 AI 领域的快速增长与广泛应用潜力。更令人振奋的是,Anthro...
【热点】
阅读更多
热门文章
最新文章
友情链接
- 标签: 康师傅
- https://www.duksung.ac.kr/search/front/Search.jsp?qt=谷歌自动批量发帖软件【tg:seogoogle987】kzh
- https://www.remit.co.jp/vi/?s=谷歌自动批量发帖软件【tg:seogoogle987】,DhJ
- https://www.abbreviations.com/谷歌自动批量发帖软件【tg:seogoogle987】h44
- https://www.teamlab.art/pt/?submit=谷歌自动批量发帖软件【tg:seogoogle987】,iPi
- https://www.pmindia.gov.in/en/?s=谷歌自动批量发帖软件【tg:seogoogle987】,uLn
- https://www.libros.unam.mx/catalogsearch/result/?cat=37&dir=asc&format=20&lit=20&manufacturer=3230&mode=list&order=year_edition&q=谷歌自动批量发帖软件【tg:seogoogle987】,KBF
- https://www.manga-news.com/index.php/recherche/?q=谷歌自动批量发帖软件【tg:seogoogle987】,zVT
- https://nicolazzi.it/en/?s=谷歌自动批量发帖软件【tg:seogoogle987】,MDN
- https://www.roberthalf.com/us/en/jobs/all/谷歌自动批量发帖软件【tg:seogoogle987】B9k
- https://www.temu.com/search_result.html?search_key=谷歌自动批量发帖软件【tg:seogoogle987】Rqj
- https://www.ntv.co.jp/3min/search/?action=QUERY&q=谷歌自动批量发帖软件【tg:seogoogle987】,pRC
- https://www.hanbat.ac.kr/search/front/Search.jsp?qt=谷歌自动批量发帖软件【tg:seogoogle987】HG7
- https://www.valuecolleges.com/?action=QUERY&s=谷歌自动批量发帖软件【tg:seogoogle987】,gme
- https://www.terramania.nl/catalogsearch/result/index/?q=谷歌自动批量发帖软件【tg:seogoogle987】,Nps
- https://www.pierreherme.com/catalogsearch/result/?q=谷歌自动批量发帖软件【tg:seogoogle987】,gFK
- https://www.sebson.de/en/search?query=谷歌自动批量发帖软件【tg:seogoogle987】,DI5
- https://www.ncetm.org.uk/search?action=CHECK&q=谷歌自动批量发帖软件【tg:seogoogle987】,u53
- https://www.ng-slo.si/si/iskanje?cat=114&q=谷歌自动批量发帖软件【tg:seogoogle987】,h1V
- https://zhidao.baidu.com/index/?action=QUERY&word=谷歌自动批量发帖软件【tg:seogoogle987】,jih
- https://www.paxnet.co.kr/search/jongmok?kwd=谷歌自动批量发帖软件【tg:seogoogle987】ohs
- https://www.zisha.com/shop/list.shtml?wap_keyword=谷歌自动批量发帖软件【tg:seogoogle987】,me7
- https://m.shoppinghow.kakao.com/m/search/q/谷歌自动批量发帖软件【tg:seogoogle987】Hod
- https://xn--lgernevedlystskoven-lxb.dk/search/谷歌自动批量发帖软件【tg:seogoogle987】,D9O
- https://www.randjleather.co.uk/index.php?route=product/search&tag=谷歌自动批量发帖软件【tg:seogoogle987】,euC
- https://www.polliwogs.com/search/谷歌自动批量发帖软件【tg:seogoogle987】,Zpo
- https://www.losgatoschamber.com/list/search?action=SEARCH&q=谷歌自动批量发帖软件【tg:seogoogle987】,3xT
- https://www.ons.gov.uk/search?q=谷歌自动批量发帖软件【tg:seogoogle987】,8cl
- https://www.roberthalf.com/us/en/jobs/all/谷歌自动批量发帖软件【tg:seogoogle987】TK0
- https://www.maigoo.com/search/?block=&q=谷歌自动批量发帖软件【tg:seogoogle987】,DSU
- https://www.l-and-b.jp/?page=1&s=谷歌自动批量发帖软件【tg:seogoogle987】,082
- https://www.spicebar.de/catalogsearch/result/?q=谷歌自动批量发帖软件【tg:seogoogle987】,R77
- https://www.vocabulary.com/dictionary/谷歌自动批量发帖软件【tg:seogoogle987】,RpN
- https://www.lenovo.com/gb/en/search?action=SEARCH&text=谷歌自动批量发帖软件【tg:seogoogle987】,DAV
- https://www.lneg.pt/?cat=140&s=谷歌自动批量发帖软件【tg:seogoogle987】,32c
- https://www.sbaad.no/search/谷歌自动批量发帖软件【tg:seogoogle987】,NFT
- https://www.impactpool.org/search/?type=79&q=谷歌自动批量发帖软件【tg:seogoogle987】IBm
- https://www.kissthekangaroo.com.au/index.php?route=product/search&tag=谷歌自动批量发帖软件【tg:seogoogle987】,OKl
- https://www.lssystems.co.uk/search?page=0&per_page=24&term=谷歌自动批量发帖软件【tg:seogoogle987】,9pC
- https://www.dba.dk/soeg/?soeg=谷歌自动批量发帖软件【tg:seogoogle987】IQX
- https://www.searcychamber.com/list/search?AsfnA=DtkTQzs&q=谷歌自动批量发帖软件【tg:seogoogle987】,Req
- https://www.kawainter.com/catalogsearch/result/?q=谷歌自动批量发帖软件【tg:seogoogle987】,g76
- https://www.lneg.pt/en/?s=谷歌自动批量发帖软件【tg:seogoogle987】,JYC
- https://www.ushmm.org/search/results/?ID=8s0587Oi8UTv74zPPM4fuhwjNpe2hsEE&q=谷歌自动批量发帖软件【tg:seogoogle987】,RPq
- https://www.remit.co.jp/id/?s=谷歌自动批量发帖软件【tg:seogoogle987】,abW
- https://www.paxnet.co.kr/search/jongmok?kwd=谷歌自动批量发帖软件【tg:seogoogle987】Nre
- https://www.lauben.com/en/?action=SEARCH&s=谷歌自动批量发帖软件【tg:seogoogle987】,rmN
- https://www.laoairlines.com/?action=QUERY&s=谷歌自动批量发帖软件【tg:seogoogle987】,CDf
- https://www.teamlab.art/zh-hans/?submit=谷歌自动批量发帖软件【tg:seogoogle987】,j56
- https://www.mdbg.net/chinese/dictionary?page=worddict&wdrst=0&wdqb=谷歌自动批量发帖软件【tg:seogoogle987】,NRl
- https://www.goodreads.com/quotes/tag/谷歌自动批量发帖软件【tg:seogoogle987】Bhd