LoginSignup
1
0

自己証明書を利用しているHarborにイメージをプッシュする

Last updated at Posted at 2023-12-15

学んだことや苦労したことを書いていきます。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

0. はじめに

何かアプリケーションをテストする際に、よく自己証明書を利用すると思います。
例にもれず、自分もHarborを自己証明書を利用してテストしました。
コマンドで証明書の検証をスキップできれば良いですが、個別に設定ファイル等で設定が必要のものもあり、個別の対応は大変なので、今回は自己証明書をルート証明書として登録することにしました。

環境

Harborサーバー

OS:Ubuntu20.04
k3sバージョン:v1.26.5+k3s1

イメージpush実行サーバー

OS:Ubuntu20.04
Dockerバージョン:24.0.5

1. Harborのデプロイ

今回HarborはHelmを利用してデプロイしました。
本題ではないので、簡単な手順だけ載せておきます。

helm repo add harbor https://helm.goharbor.io
helm repo update
helm show values harbor/harbor > values.yml
vi values.yml   #適当に編集
helm install harbor harbor/harbor -f values.yml

2. イメージpush試行

Harborにイメージをデプロイする際には、docker loginコマンドを利用してHarborにログインしてプッシュします。

docker login https://harbor.example.com
Username:[ユーザー名]
Password:[パスワード]
Error response from daemon: Get "https://harbor.example.com/v2/": 
tls: failed to verify certificate: x509: certificate signed by unknown authority

証明書エラーがでましたね。
Dockerで証明書の検証をスキップするだけなら設定ファイルに記載でいいのですが、今後Kubernetesでイメージを利用することも考えて、OSにHarborの自己証明書をルート証明書として登録します。

3. 自己証明書の取得

HelmでHarborをデプロイした場合、harbor-ingressというSecretにca.crtが保存されています。
Secretなのでbase64エンコードもされているので、デコードが必要です。

kubectl get secret
harbor-core                    Opaque               8      
harbor-database                Opaque               1      
harbor-ingress                 kubernetes.io/tls    3  # これ
harbor-jobservice              Opaque               2     
harbor-registry                Opaque               2      
harbor-registry-htpasswd       Opaque               1      
harbor-registryctl             Opaque               0      
harbor-trivy                   Opaque               2      

kubectl get secret harbor-ingress -o jsonpath="{.data.ca\.crt}" | base64 --decode > ca.crt

これで自己証明書が取得できます。

4. 自己証明書をルート証明書として登録

取得した自己証明書を、イメージをpushするサーバーに登録します。
簡単な手段として、catで中身を表示してコピーします。

Harborサーバー

cat ca.crt

イメージをpushするサーバー

vi /etc/ssl/certs/harbor-private.crt
sudo update-ca-certificates

これで証明書が登録されました。

5. Harborにログイン、イメージをプッシュ

再度ログインを試行します。

docker login https://harbor.example.com
Username:[ユーザー名]
Password:[パスワード]

Login Succeeded

無事ログインできました。
ログインさえできれば、イメージのプッシュは通常のプッシュと変わりません。

docker push harbor.example.com/[プロジェクト名]/[リポジトリ名]:[タグ]
0fb012d45c76: Pushed 
1ad27bdd166b: Layer already exists 
[タグ]: digest: sha256:d8885a73e8a5fcfea3a89770e641069dd207082ce381a58571fc833a9adc3f0e size: 735

プッシュもできましたね。

6. まとめ

検証で自己証明書はよく使われますが、証明書の検証をスキップできないコマンドもあり、操作によっては設定ファイルの書き換えが発生するので、ルート証明書として登録してしまうと非常に楽です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0