Kubernetes:如何设置“top node”和“top pod”的权限

131次阅读
没有评论

问题描述

在使用Kubernetes(K8s)时遇到了一个问题:在绑定了ClusterRole=view的用户中,需要赋予什么角色/权限,以便让该用户能够在kubectl中使用top nodetop pod命令?用户的团队使用的是kubectl版本1.15.x(客户端),在一个1.15.7版本的集群(AKS)上。用户在K8s文档中尝试查找这个权限的参考描述,但未能找到权限参考说明,只有一些示例和指南。如果你知道在哪里找到完整的K8s参考文档,用户会非常高兴,并且会将解决方案发布出来。值得注意的是,用户也在StackOverflow上发布了类似的问题,但被引导到了这里,因为这里似乎更适合解决这个问题。

解决方案

以下是在Kubernetes中为用户赋予使用kubectl top nodekubectl top pod命令所需的权限的解决方案。请注意,根据用户的描述,他们使用的是RBAC进行权限控制。

方案

用户可以通过创建一个ClusterRole来定义需要的权限,并将其与用户绑定。下面是如何设置所需权限的步骤:

  1. 创建一个YAML文件,命名为get-pod-and-node-role.yaml(或者根据你的喜好命名)。
  2. 在YAML文件中定义一个ClusterRole,赋予用户访问metrics.k8s.io API组中的podsnodes资源的权限。这将允许用户使用top nodetop pod命令。
  3. 应用这个YAML文件,创建ClusterRole。

以下是一个示例的YAML文件内容:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: get-pod-and-node
rules:
- apiGroups: ["metrics.k8s.io"]
  resources: ["pods", "nodes"]
  verbs: ["get", "watch", "list"]
  1. 使用kubectl应用该YAML文件:
kubectl apply -f get-pod-and-node-role.yaml
  1. 将ClusterRole与用户绑定。这可以通过创建一个ClusterRoleBinding或者在现有的RoleBinding中添加绑定来实现。下面是一个示例的YAML文件内容:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: grant-top-permissions
subjects:
- kind: User
  name: your_username
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: get-pod-and-node
  apiGroup: rbac.authorization.k8s.io
  1. 使用kubectl应用该YAML文件,将ClusterRole与用户绑定:
kubectl apply -f role-binding.yaml

注意事项

  • 请根据你的需要修改YAML文件中的内容,例如ClusterRole的名称和绑定的用户。
  • 在应用任何RBAC相关的更改之前,请确保你已经充分理解这些更改可能会对集群的安全性和权限产生的影响。
  • 需要根据实际情况,确保用户在Azure Active Directory中的配置正确,以确保身份验证和授权的有效性。

总结

通过创建一个自定义的ClusterRole并将其与用户绑定,你可以实现在具有ClusterRole=view权限的用户中,使其能够使用kubectl top nodekubectl top pod命令来监视集群中节点和Pod的资源使用情况。这个方案适用于RBAC启用的情况,可以确保用户只能访问他们所需的资源,从而提高了集群的安全性。

请注意,根据用户的回答,他们已经找到了解决方案并在StackOverflow上发布了相关信息。这里提供的解决方案是基于问题的描述和相关数据,可能会有细微的差异。如果用户在StackOverflow上找到了更适合他们情况的解决方案,他们应该在那里寻求更多的帮助和指导。

正文完