以前紹介したHarborに関連する内容を紹介します。harborは、robot accountを作ることができます。Harborでは、robot accountを使って、container imageのpull や pushという権限をつけて、属人化しないアカウントが提供されています。GCPとかでいうところのサービスアカウントです。今回は、このrobot accountをkubernetesのsecretとして登録する際のちょっとしたお話です。

Robot Account

↑の画面で登録することができます。

登録すると”robot$xxxx”, “token”という形式のJSONをダウンロードできます。
k8sからは、Harbor上に構築したprivate container registryを使うので、secretsを作成する必要があります。

docker-registryアクセス向けのsecretを生成する

secretsの生成は下記でできます。

                                                     
$ kubectl create secret docker-registry harbor-registry-secret —- docker-server=xxx.com --docker-username=robot$xxx --docker-password=xxx

ImagePullBackOffで認証エラーになる問題が発生

ログを見るとunauthorizedとなっているので、container registryへの認証エラーとなっている感じでしたが、しばらく悩んで、下記コマンドを実行

                                                     
$ kubectl get secret dockerconfigjson-harbor --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode

{"auths":{"xxxxxx":{"username":"robot","password":"xxxxx","email":"xxxx","auth":"xxxx"}}}⏎

usernameのrobot以降の$から先が設定されていないことが判明した。
正しくは、$をエスケープする必要があって、下記コマンドが正解^^;

                                                     
$ kubectl create secret docker-registry harbor-registry-secret —- docker-server=xxx.com --docker-username=robot\$xxx --docker-password=xxx

トラブルシュートで1時間ぐらい悩んでしまったので、もし同じようなことでつまずく人の参考になればと思い記事にしました。お疲れ様でした。