11.4. 在外部使用服务帐户凭证

您可以将服务帐户的令牌分发给必须通过 API 身份验证的外部应用程序。

若要拉取镜像,经过身份验证的用户必须具有所请求的 imagestreams/layersget 权限。要推送镜像,经过身份验证的用户必须具有所请求的 imagestreams/layersupdate 权限。

默认情况下,一个项目中的所有服务帐户都有权拉取同一项目中的任何镜像,而 builder 服务帐户则有权在同一项目中推送任何镜像。

流程

  1. 查看服务帐户的 API 令牌:

    $ oc describe secret <secret_name>

    例如:

    $ oc describe secret robot-token-uzkbh -n top-secret

    输出示例

    Name:		robot-token-uzkbh
    Labels:		<none>
    Annotations:	kubernetes.io/service-account.name=robot,kubernetes.io/service-account.uid=49f19e2e-16c6-11e5-afdc-3c970e4b7ffe
    
    Type:	kubernetes.io/service-account-token
    
    Data
    
    token:	eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...

  2. 使用您获取的令牌进行登录:

    $ oc login --token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...

    输出示例

    Logged into "https://server:8443" as "system:serviceaccount:top-secret:robot" using the token provided.
    
    You don't have any projects. You can try to create a new project, by running
    
        $ oc new-project <projectname>

  3. 确认您已经以服务帐户登录:

    $ oc whoami

    输出示例

    system:serviceaccount:top-secret:robot