OpenShift 内部のContainer Registryにイメージをpushする。(ImageStreamを作成する)


経緯・課題

OpenShiftのインフラ管理の勉強ついでに、よく使いそうな作法、つまりがちなところを備忘目的でまとめています。
インターネット接続のないCRC環境内の内部registryに、コンテナイメージをpushする際にガイド通りじゃなかったところが多少あり手間取ったので、記載しています。


前提・環境など

・ホスト:
 CRC/code ready container 環境 (CentOS Linux release 7.9.2009 (Core))
・クライアント・作業PC:
 MacOS Big Sur (11.6)


参考知識

1.3.3.3. 内部 OpenShift レジストリーへのアクセス
 基本的にはこちらのサイト通りです。一部sudoが必要でした。
2.router認証
 レジストリの手前にいるrouter周りで認証弾かれてしまうらしく、一手間かけました。
 レジストリでpodman login する際に必要
3.podman/またはdockerコマンドは導入済みであること


やりたいこと

インターネット接続なし(VPNのみ)のCRC環境の内部コンテナレジストリに、特定のコンテナイメージをpushする。

1.レジストリURLの確認

CRC環境にログインする

$ oc login -u kubeadmin -p <password>

registryURLの確認 (openshift-image-registry のnamespaceを指定して、routeが外部公開しているURLを探します。)

$ oc get route -n openshift-image-registry
(出力例)
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
default-route default-route-openshift-image-registry.apps-crc.testing image-registry reencrypt None

2.レジストリへのログイン

レジストリ手前のrouter認証のために証明書をCRC環境から取得します。(sudo で実行)
cp先のディレクトリは、適宜 sudo mkdir -p などで作成します。

\$ oc extract secret/router-ca --keys=tls.crt -n openshift-ingress-operator
$ cp tls.crt /etc/docker/certs.d/default-route-openshift-image-registry.apps-crc.testing/

一度dockerを再起動します。
レジストリへの疎通の確認は以下を実行。

$ curl -kvs https://default-route-openshift-image-registry.apps-crc.testing

podman login 実施(ガイドにはないですが、sudoをつけます。dockerでも可。--tls-verify=falseもつけます。)

\$ sudo podman login -u kubeadmin -p $(oc whoami -t) default-route-openshift-image-registry.apps-crc.testing --tls-verify=false
(出力例)
Password:
Login Succeeded!

3.imageのpush

ここでは、あらかじめ quay.io/libpod/alpineをpullしているものとします。
namespaceは管理のために作成しておくと整理しやすいです。

$ oc new-project tcptest

内部レジストリのタグ付けでは、作成済みのnamespaceを指定します。(存在しないnamespaceは指定できないので、先に作っておきます)

$ podman tag alpine:latest default-route-openshift-image-registry.apps-crc.testing/tcptest/alpine:latest

push実行

$ podman push default-route-openshift-image-registry.apps-crc.testing/tcptest/alpine:latest --tls-verify=false

push結果の確認(image streamの確認)

$ oc get is
(出力例)
NAME     IMAGE REPOSITORY                                                         TAGS     UPDATED
alpine   default-route-openshift-image-registry.apps-crc.testing/tcptest/alpine   latest   53 seconds ago

無事内部レジストリにimageをpushできました。