OCIRにログインできない
Oracle Cloud Infrastructure Registryの認証周りで地味にハマったポイントをまとめてきます。
地味にdockerやbase64の知識を問われる部分です。
エンドポイント分からない問題
ここのURLを参考にする。
大阪ならkix.ocir.io
となる。
https://docs.oracle.com/ja-jp/iaas/Content/Registry/Concepts/registryprerequisites.htm
余談
なんでkixなんだろうって思っていたのですが、関西国際空港のコードがkixらしいです。
パプアニューギニアにkiaを取られたらしい。
ポリシー設定
ココを参考に良しなに。
https://docs.oracle.com/ja-jp/iaas/Content/Registry/Concepts/registrypolicyrepoaccess.htm
ポリシー上、権限のないユーザーでもdocker login
出来てしまうのはOCIの仕様。
(イメージのPullやPushはちゃんとにポリシー準拠になる)
docker loginできない問題
ここにやり方は書かれていますが、地味な罠があります。
https://docs.oracle.com/ja-jp/iaas/Content/Registry/Tasks/registrypushingimagesusingthedockercli.htm
docker login kix.ocir.io
ユーザー名: <tenancy-namespace>/<domain>/<username> ←別ドメインのユーザーの場合はドメインが必要
パスワード: 生成したトークン
Kubernetesでイメージプルできない問題
シークレットの作成方法が地味に罠。
多くの場合、認証トークンを一重引用符で囲みます。それ以外の場合、単一引用符は必要ありません。
このやり方をすると、特殊文字が文字コード(UNICODE?)に変換されるので、パスワード不一致でログインできなくなる。
(なんでそうなるかは知らんがハマった箇所。検証した環境の言語設定が悪さしているかも)
kubectl create secret docker-registry <secret-name> --docker-server=<region-key>.ocir.io --docker-username=<tenancy-namespace>/<oci-username> --docker-password='<oci-auth-token>' --docker-email=<email-address>
Linux上のbase64
コマンドで作っていくと安全。
authの値を生成する。
echo -n
で改行させないことがポイント
(改行入れてしまうのはbase64変換でよくやるミス)
echo -n "<tenancy-namespace>/<domain>/<username>:<token>" | base64 -w 0
authはさっき確認した値を入れる。
シングルクォーテーションで囲む。
echo -n '{"auths":{"kix.ocir.io":{"username":"<tenancy-namespace>/<domain>/<username>","password":"token","email":"hoge@example.com","auth":"xxx"}}}' | base64 -w 0
Secretの一例としてこんな感じになる。
apiVersion: v1
kind: Secret
metadata:
name: myregistrykey
namespace: awesomeapps
data:
.dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
type: kubernetes.io/dockerconfigjson
参考