像老板一样在Kubernetes中配置RBAC

在这篇文章中,我将解释如何在kubernetes中配置RBAC。我们将使用kubectl和yaml定义来配置RBAC。
什么是RBAC
在kubernetes中,有几种授权机制,例如RBAC,ABAC。
使用RBAC,我们可以添加限制来访问kubernetes资源。例如,我们可以为ServiceAccount授予列出特定名称空间的Pod的权限,并阻止它删除任何资源。我们也可以针对特定的名称空间或整个集群进行此操作。
RBAC的重点
RBAC中有3个重要概念。
主题:用户,组或服务帐户。
资源:我们将在其上运行的Kubernetes API对象。
动词:我们要使用资源进行的操作。
角色和集群角色
Role和ClusterRole包含一组访问和修改kubernetes资源的规则。它们之间的区别是,角色在特定的名称空间中起作用,而ClusterRole在整个群集范围内,这从名称上可以明显看出。
如果需要在名称空间内定义权限,请使用“角色”,如果需要在整个集群范围内,请使用ClusterRole。
通过kubectl创建角色很简单,就像我在下面显示的那样:

我们也可以指定多个动作和资源:

通过yaml文件也可以:

如果我们未在role.yaml中指定名称空间,它将被视为默认名称空间。
ClusterRole没有太大区别:

仅在没有名称空间的情况下,角色定义几乎与之相同。

服务帐号
Pod内部的进程使用服务帐户与Kubernetes API进行交互。 如果您编写自定义应用程序以使用kubernetes,则可能需要创建一个为其分配了一些特殊角色的自定义ServiceAccount。 例如,当您部署kubernetes仪表板时,您可以为kubernetes-dashboard服务帐户分配其他角色,或者使用集群管理员角色绑定创建自定义ServiceAccount。
使用kubectl创建ServiceAccount非常简单:

yaml:

创建ServiceAccount后,请显示其Yaml内容:

如您所见,还有一个额外的字段“ secrets”,我们在创建ServiceAccount时未指定。 kubernetes创建了一个与我们的ServiceAccount相关的秘密。
让我们来看看我们的secret:

我们可以在此处看到令牌键值。 我们可以使用这些秘密来访问kubernetes-dashboard。 但是我们需要对其进行解码,因为kubernetes以base64编码格式存储秘密值。 简单地说,我们可以描述秘密并采用令牌值:

角色绑定和集群角色绑定
如名称所示,角色绑定使我们可以将角色绑定到主题(用户或一组用户或服务帐户)。 同样,唯一的区别是用法上,我们使用RoleBinding绑定角色,而使用ClusterRoleBinding绑定ClusterRoles。 但除此之外,我们可以使用RoleBinding将ClusterRole绑定到名称空间中的Role。
在创建角色绑定之前,我们可以询问我们的服务帐户的功能:

您将看到“ no”作为该命令的输出。
让我们创建一个与kubectl绑定的角色:

yaml格式:

ClusterRoleBinding 没有太多不同:

再试试:

回复是yes:

聚集的ClusterRoles
我们要提到的最后一件事是Aggregated ClusterRoles。 有时我们可能想将多个群集角色组合为一个。
为此,我们可以使用ClusterRole的aggregationRule字段。 我们可以使用标签选择器选择角色。 例如,假设我们有两个ClusterRole,一个用于列出pod,一个用于列出服务。 因此,我们需要另一个ClusterRole来列出Pod和服务。 现在,我们可以使用aggregationRule组合两个ClusterRoles。

原文:https://medium.com/trendyol-tech/configure-rbac-in-kubernetes-like-a-boss-665e2a8665dd