Openshift - 使用服务帐户登录 docker 注册表

Openshift - Using a service account to login to the docker registry

我目前正在尝试使用项目默认服务帐户“builder”登录到我的项目 Openshift docker 注册表,然后将图像推送到它。

使用 oc cli 登录成功,但是当我尝试登录 docker 注册表时:

docker login -u $(oc whoami) -p $(oc whoami --show-token) registry.pro-eu-west-1.openshift.com:443

我正面临:

Error response from daemon: Get https://registry.pro-eu-west-1.openshift.com:443/v2/: unauthorized: authentication required

构建器服务帐户似乎没有登录 Openshifts docker 注册表的权限,尽管它具有角色 system:image-builder,其描述如下:

Grants the rights to build, push and pull images from within a project.
...

有什么想法可能会出错吗?

虽然我不知道为什么 docker login 没有按您期望的方式工作,但您可以使本地 docker 作为当前 oc 用户,使用以下内容:

oc registry login

如果您想以 builder 等 ServiceAccount 身份登录(如果这不是您使用 oc 登录的用户,您可以使用 -z选项(假设您在 ServiceAccount 所在的项目中):

oc registry login -z builder

还请记住,在集群中,builder ServiceAccount 可以使用名为 builder-dockercfg-zftv4.

的 Secret 访问映像注册表

如果您仍然 want/need 使用 oc 以外的其他方式登录(例如使用某些不处理 ~/.docker/config.json 的工具),则以服务帐户,您需要将用户名更改为完全限定的 ServiceAccount 名称,但将冒号替换为连字符。

例如如果你有一个名为 my-project 的项目,它有一个 builder ServiceAccount,那么 Kubernetes 中的完全限定名称将是:

system:serviceaccount:my-project:builder

但作为 OpenShift 中集群内注册表的注册表用户名,它将是:

system-serviceaccount-my-project-builder