如何为 Kubernetes 仪表板创建服务账号和集群角色绑定

KubernetesBeginner
立即练习

简介

Kubernetes 服务账号是管理在 Kubernetes 集群中运行的应用程序的标识和访问控制的关键组件。本教程将指导你了解 Kubernetes 服务账号,使用服务账号配置 Kubernetes 仪表板,并授予仪表板所需的权限。

理解 Kubernetes 服务账号

Kubernetes 服务账号是管理在 Kubernetes 集群中运行的应用程序的标识和访问控制的关键组件。它们为 Pod 提供了一种对与 Kubernetes API 服务器的交互进行认证和授权的方式,从而实现安全的通信和资源访问。

什么是 Kubernetes 服务账号?

Kubernetes 服务账号与 Pod 相关联,并为在这些 Pod 中运行的进程提供标识。它们用于对 Pod 与 Kubernetes API 服务器之间的交互进行认证和授权。Kubernetes 集群中的每个命名空间都有一个默认服务账号,你也可以创建自定义服务账号以满足特定的应用需求。

为什么要使用 Kubernetes 服务账号?

Kubernetes 服务账号有几个重要作用:

  1. API 访问:服务账号授予 Pod 访问 Kubernetes API 的必要权限,使其能够执行各种操作,如读取、创建或修改资源。
  2. 安全通信:服务账号用于对 Pod 进行认证,确保只有经过授权的 Pod 才能与 Kubernetes API 服务器进行交互。
  3. 资源隔离:通过为不同的应用程序或组件使用不同的服务账号,你可以在 Kubernetes 集群中实现资源隔离和细粒度的访问控制。

配置 Kubernetes 服务账号

要配置 Kubernetes 服务账号,你可以按以下步骤操作:

  1. 创建服务账号:你可以使用 kubectl create serviceaccount 命令创建新的服务账号。例如,要在 “default” 命名空间中创建名为 “my-app-sa” 的服务账号,你可以运行:
kubectl create serviceaccount my-app-sa -n default
  1. 将服务账号分配给 Pod:创建 Pod 时,你可以指定 Pod 要使用的服务账号。这在 Pod 的 YAML 配置文件中的 spec.serviceAccountName 字段下完成:
apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  serviceAccountName: my-app-sa
  containers:
    - name: my-app
      image: my-app:v1
  1. 授予服务账号权限:默认情况下,服务账号的权限有限。要授予服务账号必要的权限,你可以创建一个 RoleClusterRole,并使用 RoleBindingClusterRoleBinding 将其绑定到服务账号。

所需的具体权限将取决于你的应用程序在 Kubernetes 集群中需要执行的操作。

使用服务账号配置 Kubernetes 仪表板

Kubernetes 仪表板是一个强大的基于 Web 的用户界面,可让你管理 Kubernetes 集群。为了保护仪表板的安全并控制对它的访问,你可以将其配置为使用 Kubernetes 服务账号。

为 Kubernetes 仪表板创建服务账号

  1. 为 Kubernetes 仪表板创建一个新的服务账号:
kubectl create serviceaccount dashboard-sa -n kubernetes-dashboard
  1. 验证服务账号的创建:
kubectl get serviceaccounts -n kubernetes-dashboard

授予仪表板服务账号权限

  1. 创建一个 ClusterRoleBinding,为仪表板服务账号授予必要的权限:
kubectl create clusterrolebinding dashboard-sa-cluster-admin-binding --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-sa

这会将 cluster-admin ClusterRole 绑定到 kubernetes-dashboard 命名空间中的 dashboard-sa 服务账号,授予其对集群的完全管理访问权限。

配置 Kubernetes 仪表板以使用服务账号

  1. 修改 Kubernetes 仪表板部署以使用 dashboard-sa 服务账号:
kubectl edit deployment kubernetes-dashboard -n kubernetes-dashboard

spec.template.spec.serviceAccountName 字段更新为 dashboard-sa

  1. 重启 Kubernetes 仪表板 Pod 以使更改生效:
kubectl delete pod -n kubernetes-dashboard -l app.kubernetes.io/name=kubernetes-dashboard

现在,Kubernetes 仪表板将使用 dashboard-sa 服务账号与 Kubernetes API 服务器进行交互,从而提供对集群资源的安全访问。

授予 Kubernetes 仪表板权限

要授予 Kubernetes 仪表板所需的权限,你可以使用 Kubernetes 的基于角色的访问控制(RBAC)来定义和分配适当的角色和权限。

理解 Kubernetes RBAC

Kubernetes RBAC 是一种用于控制对 Kubernetes 资源访问的强大机制。它允许你定义具有特定权限的角色,然后将这些角色分配给用户、组或服务账号。

主要的 RBAC 组件包括:

  • 角色(Roles):定义一组可以授予主体的权限。
  • 集群角色(ClusterRoles):与角色类似,但应用于整个集群。
  • 角色绑定(RoleBindings):将角色绑定到主体(用户、组或服务账号)。
  • 集群角色绑定(ClusterRoleBindings):将集群角色绑定到主体。

授予 Kubernetes 仪表板权限

要授予 Kubernetes 仪表板所需的权限,你可以创建一个集群角色和一个集群角色绑定。

  1. 创建一个授予所需权限的集群角色:
kubectl create clusterrole dashboard-cluster-role --resource=deployments,pods,services,secrets,configmaps,jobs,cronjobs --verb=get,list,watch,create,update,delete

此集群角色授予对指定 Kubernetes 资源的读取、写入和删除权限。

  1. 创建一个集群角色绑定,将集群角色绑定到 Kubernetes 仪表板服务账号:
kubectl create clusterrolebinding dashboard-cluster-role-binding --clusterrole=dashboard-cluster-role --serviceaccount=kubernetes-dashboard:dashboard-sa

这会将 dashboard-cluster-role 集群角色绑定到 kubernetes-dashboard 命名空间中的 dashboard-sa 服务账号。

现在,Kubernetes 仪表板将拥有访问和管理 Kubernetes 集群内资源所需的权限。

总结

在本教程中,你已经了解了 Kubernetes 服务账号、它们的重要性以及如何进行配置。你还学习了如何使用服务账号设置 Kubernetes 仪表板,并授予仪表板所需的权限。通过理解并正确配置 Kubernetes 服务账号,你可以确保在 Kubernetes 集群内实现安全通信和细粒度的访问控制。