system:serviceaccount:<project>:<name>
服务账户是一个OpenShift Dedicated账户,允许组件直接访问API。服务账户是存在于每个项目中的API对象。服务账户提供了一种灵活的方式来控制API访问,而无需共享普通用户的凭据。
当您使用OpenShift Dedicated CLI或Web控制台时,您的API令牌会验证您对API的访问权限。您可以将组件与服务账户关联起来,以便它们无需使用普通用户的凭据即可访问API。
每个服务账户的用户名都源自其项目和名称
system:serviceaccount:<project>:<name>
每个服务账户也是两个组的成员
组 | 描述 |
---|---|
system:serviceaccounts |
包含系统中的所有服务账户。 |
system:serviceaccounts:<project> |
包含指定项目中的所有服务账户。 |
每个服务账户自动包含两个密钥
一个API令牌
OpenShift Container Registry的凭据
生成的API令牌和注册表凭据不会过期,但您可以通过删除密钥来撤销它们。当您删除密钥时,会自动生成一个新的密钥来代替它。
您的OpenShift Dedicated集群包含用于集群管理的默认服务账户,并为每个项目生成更多服务账户。
一些基础设施控制器使用服务账户凭据运行。以下服务账户在服务器启动时在OpenShift Dedicated基础设施项目(openshift-infra
)中创建,并在集群范围内被赋予以下角色
服务账户 | 描述 |
---|---|
|
被分配了 |
|
被分配了 |
|
被分配了 |
每个项目中都会自动创建三个服务账户
服务账户 | 用途 | ||
---|---|---|---|
|
由构建 Pod 使用。它被赋予
|
||
|
由部署 Pod 使用,并被赋予
|
||
|
用于运行所有其他 Pod,除非它们指定不同的服务帐户。 |
项目中的所有服务帐户都被赋予system:image-puller
角色,允许使用内部容器镜像注册表从项目中的任何镜像流拉取镜像。
默认情况下,OpenShift Dedicated 为每个服务帐户创建一个镜像拉取密钥。
在 OpenShift Dedicated 4.16 之前,还会为创建的每个服务帐户生成一个长期有效的服务帐户 API 令牌密钥。从 OpenShift Dedicated 4.16 开始,不再创建此服务帐户 API 令牌密钥。 升级到版本后,任何现有的长期有效的服务帐户 API 令牌密钥都不会被删除,并将继续发挥作用。有关检测集群中正在使用的长期有效的 API 令牌或在不需要时删除它们的详细信息,请参阅 Red Hat 知识库文章 OpenShift Container Platform 中的长期有效的服务帐户 API 令牌。 |
此镜像拉取密钥对于将 OpenShift 镜像注册表集成到集群的用户身份验证和授权系统中是必要的。
但是,如果您未启用ImageRegistry
功能,或者在集群镜像注册表操作员的配置中禁用了集成的 OpenShift 镜像注册表,则不会为每个服务帐户生成镜像拉取密钥。
在先前启用了集成的 OpenShift 镜像注册表的集群上禁用它时,先前生成的镜像拉取密钥将被自动删除。
您可以在项目中创建一个服务帐户,并通过将其绑定到角色来授予其权限。
可选:查看当前项目中的服务帐户
$ oc get sa
NAME SECRETS AGE
builder 2 2d
default 2 2d
deployer 2 2d
在当前项目中创建一个新的服务帐户
$ oc create sa <service_account_name> (1)
1 | 要在不同的项目中创建服务帐户,请指定-n <project_name> 。 |
serviceaccount "robot" created
您也可以应用以下 YAML 来创建服务帐户
|
可选:查看服务帐户的密钥
$ oc describe sa robot
Name: robot
Namespace: project1
Labels: <none>
Annotations: <none>
Image pull secrets: robot-dockercfg-qzbhb
Mountable secrets: robot-dockercfg-qzbhb
Tokens: robot-token-f4khf
Events: <none>