🐳

OpenShift Container Platform registryを使ってみた

2022/08/11に公開

はじめに

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