🐳

OpenShift Container Platform registryを使ってみた

に公開

はじめに

OpenShift Container Platform registry とか internal registry for OpenShift Container Platform とか呼ばれてる OpenShift にデフォルトで入ってる Image Registory を使うときにハマったので、そのメモ。
OpenShift 使っていて、コンテナイメージを OpenShift のクラスタ上におきたい人向けの内容。
下記公式ドキュメントだと、うまくいかなかったので、それプラスアルファについて。
一部、Mac 向けの内容も。

Registry overview | Registry | OpenShift Container Platform 4.8

環境

以下の通り。
(Mac のバージョンと oc のバージョンは関係ないと思う)

OpenShift 4.8
Mac Monterey 12.5

$ oc version
Client Version: 4.9.15
Server Version: 4.8.46
Kubernetes Version: v1.21.11+6b3cbdd

背景

コンテナのイメージを置いとく場所として、Docker HubGitHub Packages Container registryが有名だけど、OpenShift 上にもイメージレジストリを構築できるらしい。
どうも、OpenShift Container Platform registryって呼ばれてるみたい。the がついてるし registry が小文字やし、固有名詞じゃなさそうやけど。こういうのんをデフォルトで準備してくれてるのが OpenShift の良いところなんやと思う。

ここに色々載ってそう。
Registry OpenShift Container Platform 4.8 | Red Hat Customer Portal

したこと

下記公式ドキュメントに、やり方が書かれてる。ただ、そのままじゃ動かなかった。
以下、やったことを順番に記載。

Exposing the registry | Registry | OpenShift Container Platform 4.8

OpenShift にログイン

コンソールからトークンを含んだ login コマンドを取得できるので、それをコピペして実行。

 oc login --token=ほげ --server=https://ふが

config の修正

イメージレジストリ用の設定リソースを修正する。

 oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge

下記コマンドで、修正できたか確認できる。

oc describe configs.imageregistry.operator.openshift.io cluster

それっぽい感じになった。

...

Spec:
  Default Route:       true

...

イメージのホスト名取得

次に、イメージのホスト名を取得する。
それっぽい route があるか確認してみる。

oc get route -n openshift-image-registry

環境変数に入れておく。必要に応じて、.bashrcとかに書いておく。

HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}')
echo $HOST

証明書取得

次に、証明書を取得する。secret に登録されてる。なぜか、公式ドキュメントの下記コマンドだと動かない。

oc get secret -n openshift-ingress router-certs-default -o go-template='{{index .data "tls.crt"}}' | base64 -d | sudo tee /etc/pki/ca-trust/source/anchors/${HOST}.crt > /dev/null

それっぽいのがないか探してみる。

oc get secret -n openshift-ingress

router-metrics-certs-defaultがそれっぽいので、置き換えて試してみる。そうすると動いた。、/etc/pki/ca-trust/source/anchorsmkdir -pしておく必要があったかも。

oc get secret -n openshift-ingress router-metrics-certs-default -o go-template='{{index .data "tls.crt"}}' | base64 -d | sudo tee /etc/pki/ca-trust/source/anchors/${HOST}.crt > /dev/null

証明書の登録

次にsudo update-ca-trust enableで証明書を登録する。ただ、Mac だと動かないので、下記サイトを参考に、登録する。.crtファイルの場所をここで指定するので、どこに置いても良かった気がする。

プライベート認証局の CA 証明書を追加する(Windows・Mac OS X・CentOS 7・Ubuntu Server16.04) | 俺的備忘録 〜なんかいろいろ〜

下記コマンドでいけたっぽい。securityコマンドは下記参照。
security - cert - macOS - SS64.com

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /etc/pki/ca-trust/source/anchors/${HOST}.crt

docker login して push

後は、こんな感じで docker login して、すでにあるイメージに tag をつけて、push。
ホスト名の後に、namespace 入れて、その後に

sudo docker login -u kubeadmin -p $(oc whoami -t) $HOST
docker tag fuga $HOST/hoge-namespace/fuga:latest
docker push $HOST/hoge-namespace/fuga:latest

docker tag はここら参照。
docker tag — Docker-docs-ja 20.10 ドキュメント

push できたかどうかと、イメージリポジトリのパスは下記コマンドで確認できる。

oc get imagestreams

おわりに

そこそこハマったけど、使えるようになって良かった。OpenShift の理解も多少深まった気がする。

GitHubで編集を提案

Discussion