在现代云计算和自动化运维中,Kubernetes(K8s)已经成为不可或缺的工具,而服务账户(Service Account, SA)作为Kubernetes中的一种特殊账户类型,扮演着重要角色,本文将详细探讨服务账户的概念、特点、使用场景以及配置方法。
一、什么是服务账户(Service Account)
服务账户是由Kubernetes API管理的账户,用于为Pod中的服务进程在访问Kubernetes API时提供身份标识,这些账户通常绑定于特定的命名空间,由API Server创建或通过API调用动态创建,附带着一组存储为Secret的用于访问API Server的凭据。
二、用户账户与服务账户的区别
特性 | 用户账户 | 服务账户 |
用途 | 人类用户操作Kubernetes集群 | Pod与API Server通信 |
管理方式 | 外部认证系统,如证书、OIDC、Webhook | Kubernetes内部自动管理 |
命名空间 | 跨命名空间 | 作用范围限制在命名空间内 |
权限分配 | 通过RBAC或ClusterRoleBinding分配权限 | 通过Role或ClusterRoleBinding分配权限 |
使用场景 | 管理员登录、开发者调试 | 服务访问API、任务自动化 |
三、服务账户的特点
1、自动挂载令牌:
服务账户令牌会自动挂载到Pod的/var/run/secrets/kubernetes.io/serviceaccount
路径下,Pod中的应用可以使用该令牌与Kubernetes API交互。
2、与RBAC配合使用:
服务账户通过绑定角色(Role或ClusterRole)来定义具体可以访问哪些资源及操作范围。
3、命名空间隔离:
服务账户属于特定命名空间,无法直接访问其他命名空间的资源。
四、服务账户的使用场景
1、监控工具访问集群:
Prometheus等监控工具通过服务账户获取集群状态信息,例如Pod、节点的运行状态。
2、自动化任务执行:
CI/CD流水线中的任务通过服务账户操作集群,如部署新版本应用。
3、权限最小化:
不同服务使用独立的服务账户,只分配其所需的最小权限,确保安全性。
五、服务账户的配置与使用
1、创建服务账户:
apiVersion: v1 kind: ServiceAccount metadata: name: custom-sa namespace: default
应用配置文件:
kubectl apply -f service-account.yaml
2、在Pod中指定服务账户:
apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: name: nginx image: nginx serviceAccountName: custom-sa
3、为服务账户绑定权限:
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: example-rolebinding namespace: default subjects: kind: ServiceAccount name: custom-sa namespace: default roleRef: kind: Role name: example-role apiGroup: rbac.authorization.k8s.io
六、服务账户的自动化管理组件
1、Admission Controller:
Admission Controller插件实现对Pod修改的控制,确保每个Pod都有关联的服务账户,当创建或更新Pod时,如果没有指定ServiceAccount,则默认设置为“default”。
2、Token Controller:
TokenController异步观察ServiceAccount的创建和删除,并相应地创建和删除Secret,它还负责更新和验证ServiceAccount的Token。
3、Service Account Controller:
Service Account Controller管理命名空间内的ServiceAccount,确保每个有效的命名空间都存在一个名为“default”的ServiceAccount。
七、FAQs
1、什么是服务账户?
服务账户是由Kubernetes API管理的账户,用于为Pod中的服务进程在访问Kubernetes API时提供身份标识,它们通常绑定于特定的命名空间,附带着一组存储为Secret的用于访问API Server的凭据。
2、如何为服务账户绑定权限?
可以通过RBAC(基于角色的访问控制)为服务账户绑定权限,创建一个Role或ClusterRole,并将其绑定到服务账户上。
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: example-rolebinding namespace: default subjects: kind: ServiceAccount name: custom-sa namespace: default roleRef: kind: Role name: example-role apiGroup: rbac.authorization.k8s.io
八、小编有话说
服务账户是Kubernetes中一种非常重要的概念,它为Pod提供了安全且便捷的方式来访问Kubernetes API,通过合理配置和管理服务账户,可以实现更细粒度的权限控制和更高的安全性,希望本文能帮助大家更好地理解和使用服务账户,提升Kubernetes集群的安全性和管理效率。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1450154.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复