kubernetes 如何使用kubectl检查RBAC是否已启用

e7arh2l6  于 2022-11-28  发布在  Kubernetes
关注(0)|答案(8)|浏览(377)

我试图在kubernetes集群上安装helm软件包,但据称该集群禁用了RBAC。我收到了一个权限错误,提示clusterroles.rbac.authorization.k8s.io,如果RBAC * 启用 *,我会收到这个错误。
是否有方法使用kubectl检查RBAC是否真的被禁用?
我尝试过:

  • kubectl describe nodes --all-namespaces | grep -i rbac:未出现任何内容
  • kubectl describe rbac --all-namespaces | grep -i rbac:未出现任何内容
  • kubectl config get-contexts | grep -i rbac:未出现任何内容
  • k get clusterroles它说“No resources found”,而不是一个错误消息。那么这是否意味着RBAC * 是 * 启用的?
  • kuebctl describe cluster不是一个东西

我知道这可能是x-y problem,因为我正在安装的helm包可能希望启用RBAC。但我仍然想知道如何检查它是否启用/禁用。

5ssjco0h

5ssjco0h1#

您可以通过执行命令kubectl api-versions来检查这一点;如果启用了RBAC,您应该会看到API版本.rbac.authorization.k8s.io/v1
在AKS中,最好的方法是检查resources.azure.com处的群集资源详细信息。如果您能发现"enableRBAC": true,则说明您的群集启用了RBAC。请注意,现有的未启用RBAC的AKS群集当前无法更新为使用RBAC。(感谢@DennisAmeling的澄清)

vxf3dgd4

vxf3dgd42#

我希望有更好的方法,但我使用的是:

$ kubectl cluster-info dump | grep authorization-mode

如果您可以执行它,您应该会看到RBAC列在那里或没有,如果您没有权限这样做,那么,RBAC可能是启用的。

snz8szmq

snz8szmq3#

对于Azure(AKS)来说,这有点棘手。虽然kubectl api-versions命令确实返回rbac.authorization.k8s.io/v1,但kubectl get clusterroles命令不返回默认的system:前缀角色。
检查AKS的最佳方法是检查群集的资源详细信息,例如resources.azure.com。如果"enableRBAC": true,则说明您的群集已启用RBAC。现有未启用RBAC的AKS群集cannot currently be updated可供RBAC使用。因此,如果要在AKS上启用RBAC,则必须创建新群集。

vbopmzt1

vbopmzt14#

对于Azure(AKS),我认为Azure CLI工作得很好。

az resource show -g <resource group name> -n <cluster name> --resource-type Microsoft.ContainerService/ManagedClusters --query properties.enableRBAC

它与使用resources.azure.com基本相同,但我发现使用Azure CLI更快

ejk8hzay

ejk8hzay5#

选项#1:如果您有访问主节点的权限,请登录并检查以下内容

ps -aef | grep -i apiserver
The options should have --authorization-mode=RBAC otherwise RBAC not enabled.

选项2:

kubectl get clusterroles | grep -i rbac

希望这对你有帮助
鲁格兹·苏达卡尔

inb24sb2

inb24sb26#

ps -aef | grep -i apiserver是找出答案的最简单方法。

gkl3eglg

gkl3eglg7#

对于AKS,如果您有多个集群(您确实有,对吗?),您可以通过以下方式获得enabledRbac属性的列表

: my-desktop:~:0; az aks list | jq -r '.[]|"Cluster: \(.name) Resource-group: \(.resourceGroup) Enabled: \(.enableRbac) "' | column -t
Cluster:  test                  Resource-group:  dev-stack   Enabled:  false
Cluster:  ftx-cluster-1         Resource-group:  prod        Enabled:  true
Cluster:  ftx-cluster-2         Resource-group:  prod        Enabled:  true
Cluster:  taskrabbit            Resource-group:  newprod     Enabled:  true
r8xiu3jd

r8xiu3jd8#

这些解决方案没有一个是通用的。它们在某些地方工作,但在其他地方不工作。唯一可靠的方法是实际测试RBAC API,看看它是否强制实施权限。您可以这样做:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: no-permissions
  namespace: default

由于此服务帐户没有角色绑定,因此在启用RBAC时无法执行任何操作。在禁用RBAC时,此情况会发生变化。
然后,您可以使用kubectl来确定是否强制执行访问权限
RBAC关闭

> kubectl auth can-i get cm -A --as=system:serviceaccount:default:no-permissions
yes

启用RBAC

> kubectl auth can-i get cm -A --as=system:serviceaccount:default:no-permissions
no

相关问题