我知道如何使用X.509证书的RBAC来识别kubectl
的用户,并限制他们(使用Role
和RoleBinding
)在命名空间中创建任何类型的pod。但是,我不知道如何阻止他们在他们试图创建的pod(或任何资源)上放置特定的标签。
我想做的是:
1.创建一个NetworkPolicy
,只允许其他名称空间中带有标签group: cross-ns
的资源访问special-namespace
中的资源
1.有一个用户无法创建标签为group: cross-ns
的pod或其他资源
1.让另一个用户可以创建标签为group: cross-ns
的资源
这可能吗?
1条答案
按热度按时间6tdlim6h1#
您可以使用Kubernetes原生策略引擎Kyverno:
Kyverno在Kubernetes集群中作为动态准入控制器运行。Kyverno从kube-apiserver接收验证和变更准入webhook HTTP回调,并应用匹配策略返回执行准入策略或拒绝请求的结果。
Kyverno策略是可以应用于整个集群(
ClusterPolicy
)或特定命名空间(Policy
)的规则集合。我将创建一个示例来说明它是如何工作的。
首先,我们需要安装Kyverno,您可以选择直接从最新版本清单安装Kyverno,或者使用Helm(请参阅:快速入门指南):
字符串
安装成功后,让我们创建一个简单的
ClusterPolicy
:型
在上面的示例中,只有使用
cluster-admin
ClusterRole
才能修改标签为purpose
的Pod。假设我有两个用户(
john
和dave
),但只有john
通过ClusterRoleBinding
链接到cluster-admin
ClusterRole
:型
最后,我们可以测试它是否按预期工作:
型
更多详细解释的例子可以在Kyverno Writing Policies documentation中找到。