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 Hub
やGitHub 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/anchors
をmkdir -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 の理解も多少深まった気がする。
Discussion