简介
Kubernetes 服务账号是管理在 Kubernetes 集群中运行的应用程序的标识和访问控制的关键组件。本教程将指导你了解 Kubernetes 服务账号,使用服务账号配置 Kubernetes 仪表板,并授予仪表板所需的权限。
理解 Kubernetes 服务账号
Kubernetes 服务账号是管理在 Kubernetes 集群中运行的应用程序的标识和访问控制的关键组件。它们为 Pod 提供了一种对与 Kubernetes API 服务器的交互进行认证和授权的方式,从而实现安全的通信和资源访问。
什么是 Kubernetes 服务账号?
Kubernetes 服务账号与 Pod 相关联,并为在这些 Pod 中运行的进程提供标识。它们用于对 Pod 与 Kubernetes API 服务器之间的交互进行认证和授权。Kubernetes 集群中的每个命名空间都有一个默认服务账号,你也可以创建自定义服务账号以满足特定的应用需求。
为什么要使用 Kubernetes 服务账号?
Kubernetes 服务账号有几个重要作用:
- API 访问:服务账号授予 Pod 访问 Kubernetes API 的必要权限,使其能够执行各种操作,如读取、创建或修改资源。
- 安全通信:服务账号用于对 Pod 进行认证,确保只有经过授权的 Pod 才能与 Kubernetes API 服务器进行交互。
- 资源隔离:通过为不同的应用程序或组件使用不同的服务账号,你可以在 Kubernetes 集群中实现资源隔离和细粒度的访问控制。
配置 Kubernetes 服务账号
要配置 Kubernetes 服务账号,你可以按以下步骤操作:
- 创建服务账号:你可以使用
kubectl create serviceaccount命令创建新的服务账号。例如,要在 “default” 命名空间中创建名为 “my-app-sa” 的服务账号,你可以运行:
kubectl create serviceaccount my-app-sa -n default
- 将服务账号分配给 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
- 授予服务账号权限:默认情况下,服务账号的权限有限。要授予服务账号必要的权限,你可以创建一个
Role或ClusterRole,并使用RoleBinding或ClusterRoleBinding将其绑定到服务账号。
所需的具体权限将取决于你的应用程序在 Kubernetes 集群中需要执行的操作。
使用服务账号配置 Kubernetes 仪表板
Kubernetes 仪表板是一个强大的基于 Web 的用户界面,可让你管理 Kubernetes 集群。为了保护仪表板的安全并控制对它的访问,你可以将其配置为使用 Kubernetes 服务账号。
为 Kubernetes 仪表板创建服务账号
- 为 Kubernetes 仪表板创建一个新的服务账号:
kubectl create serviceaccount dashboard-sa -n kubernetes-dashboard
- 验证服务账号的创建:
kubectl get serviceaccounts -n kubernetes-dashboard
授予仪表板服务账号权限
- 创建一个 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 仪表板以使用服务账号
- 修改 Kubernetes 仪表板部署以使用
dashboard-sa服务账号:
kubectl edit deployment kubernetes-dashboard -n kubernetes-dashboard
将 spec.template.spec.serviceAccountName 字段更新为 dashboard-sa。
- 重启 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 仪表板所需的权限,你可以创建一个集群角色和一个集群角色绑定。
- 创建一个授予所需权限的集群角色:
kubectl create clusterrole dashboard-cluster-role --resource=deployments,pods,services,secrets,configmaps,jobs,cronjobs --verb=get,list,watch,create,update,delete
此集群角色授予对指定 Kubernetes 资源的读取、写入和删除权限。
- 创建一个集群角色绑定,将集群角色绑定到 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 集群内实现安全通信和细粒度的访问控制。


