在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。

スクリーンショット 2021-10-27 10.47.39.png

4. 参考信息

以下是IBM Cloud DOC的相关信息链接。

通过使用不同的 IAM API 密钥凭据创建镜像拉取机密,可以实现更精细的控制,或者允许访问其他 IBM Cloud 帐户中的镜像的方式。

设置内部仓库的构建,以便将镜像推送到IBM云容器注册表。

广告
将在 10 秒后关闭
bannerAds