在IBM Cloud上的OpenShift上将图像存储在IBM Cloud容器注册中
1. 目标所在
我整理了在IBM云上的OpenShift上将镜像存储到IBM云容器注册表的步骤并进行了确认。
如果要在IBM Cloud容器注册表中使用映像,然后在IBM Cloud上的OpenShift中使用,可以复制默认项目的ImagePullSecret并重复使用。但如果要推送映像,则需要从创建IBM Cloud IAM的ServiceID开始,这可能会变得相当困难。
使用在IBM Cloud上的OpenShift,在IBM Cloud容器注册表中使用图像。
2. 步骤
1. 创建服务ID (IBM Cloud IAM)
为 IAM Policy 和 API Key 创建一个用于使用的 IBM Cloud IAM Service ID。在这里,我们将其命名为 service99。
% ibmcloud iam service-id-create service99
nsakata@jp.ibm.com として 現行アカウント にバインドされるサービス ID service99 を作成しています...
OK
サービス ID service99 が正常に作成されました
ID ServiceId-aa7c7cd6-29ea-411c-8a62-bc6d0b0aa495
名前 service99
説明
CRN crn:v1:bluemix:public:iam-identity::a/039dbe6794084c7cb514a276dd2345da::serviceid:ServiceId-aa7c7cd6-29ea-411c-8a62-bc6d0b0aa495
バージョン 1-5724e0df9fe031f518ec6cf708d7b040
ロック中 false
2. 授予对IBM云容器注册表访问权限(IAM)。
为了授予对ICR(IBM云容器注册表)的访问权限,给予上述创建的服务ID写入权限。 如果指定的角色中找不到Writer,在”役割Writerが見つかりませんでした。有効な役割は管理者、ライター、リーダー、ビューアー、管理者、オペレーター、エディターです”错误出现时,请按照消息中的日语指定Writer。
% ibmcloud iam service-policy-create service99 --roles ライター --service-name container-registry
nsakata@jp.ibm.com としてサービス ID service99 の 現行アカウント にポリシーを作成しています...
OK
サービス・ポリシーは正常に作成されます
ポリシー ID: 0ee6a548-307e-4718-bbd0-5d390901f39f
バージョン: 1-fe2a60b718fc9eece90c415b7358dcb8
役割: ライター
リソース:
サービス名 container-registry
创建 API 密钥(IAM)
在这里创建一个名为apikey99的服务ID的API密钥。
% ibmcloud iam service-api-key-create apikey99 service99
nsakata@jp.ibm.com としてアカウント 039dbe6794084c7cb514a276dd2345da にサービス ID service99 の API キー apikey99 を作成しています...
OK
サービス ID API キー apikey99 が作成されます
API キーを保存してください。 作成後に取得することはできません。
ID ApiKey-49ceb0f7-4339-4a20-b559-bc9eb2b83e9d
名前 apikey99
説明
作成日時 2021-10-22T08:09+0000
API キー xqgbZXXXXXXXXXXXXXXXXXXXXXXXXXXX
ロック中 false
4. 在IBM云上创建机密(OpenShift)
在ROKS(IBM云上的OpenShift)集群的项目test20中创建具有权限以进行ICR拉取的密钥。将上述获取的API密钥输入到–docker-password中。将–docker-email指定为x@y.z。密钥名称为secret99。
% oc --namespace test20 create secret docker-registry secret99 --docker-server icr.io --docker-username iamapikey --docker-password xqgbZXXXXXXXXXXXXXXXXX --docker-email x@y.z
secret/secret99 created
4. 将机密添加到服务账户(ROKS)。
将先前创建的secret99秘钥添加到集群内的服务帐号builder中,以便在构建过程中使用。
% oc secrets link builder secret99
4. 运行和确认构建(ROKS)
创建并运行BuildConfig。通过指定–to-docker参数,将生成的镜像注册到外部注册表。通过–to参数指定ICR的icr.io命名空间test1(事先已创建)。
创建并执行BuildConfig。通过指定–to-docker参数,将生成的镜像注册到外部的注册表中。使用–to参数指定ICR的icr.io命名空间test1(事先已创建)来进行指定。
% oc new-build openshift/nodejs~https://github.com/sclorg/nodejs-ex.git --to-docker --to icr.io/test1/nodejs-ex
--> Found image b23116f (9 days old) in image stream "openshift/nodejs" under tag "14-ubi8" for "openshift/nodejs"
Node.js 14
----------
Node.js 14 available as container is a base platform for building and running various Node.js 14 applications and frameworks. Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
Tags: builder, nodejs, nodejs14
* A source build using source code from https://github.com/sclorg/nodejs-ex.git will be created
* The resulting image will be pushed with Docker to "icr.io/test1/nodejs-ex"
* Use 'oc start-build' to trigger a new build
--> Creating resources with label build=nodejs-ex ...
buildconfig.build.openshift.io "nodejs-ex" created
--> Success
我会查看构建日志并确认它们被正确地存储在ICR中。
% oc get pods
NAME READY STATUS RESTARTS AGE
nodejs-ex-1-build 0/1 Completed 0 2m11s
% oc logs -f nodejs-ex-1-build
Caching blobs under "/var/cache/blobs".
Getting image source signatures
Copying blob sha256:06038631a24a25348b51d1bfc7d0a0ee555552a8998f8328f9b657d02dd4c64c
中途略
Successfully pushed icr.io/test1/nodejs-ex@sha256:19924bfd6fafff6a06ef52b705f60a88d4415124f30eeadd9f3a7f2fc333f001
Push successful
3. 从IBM云门户进行确认。
我确认在ICR的画面上可以看到已经创建了上述创建的image nodejs-ex。

4. 参考信息
以下是IBM Cloud DOC的相关信息链接。
通过使用不同的 IAM API 密钥凭据创建镜像拉取机密,可以实现更精细的控制,或者允许访问其他 IBM Cloud 帐户中的镜像的方式。
设置内部仓库的构建,以便将镜像推送到IBM云容器注册表。