概要
コンテナレジストリにhttpsで接続する場合、証明書が必要となります。IPアドレスで証明書を作成して、docker pushを行う場合の手順を記載しました。harborは仮想アプライアンスを使用しています。
環境
# | ソフトウェア | バージョン |
2 | Rocky Linux | 9.1 |
3 | docker-ce | 3:23.0.2-1 |
4 | containerd.io | 1.6.20-3.1 |
5 | docker-compose-plugin | 2.17.2-1 |
6 | harbor | 2.6.3 |
前提
- Rocky Linuxのインストールで「最小限のインストール」を選択
- 検証であるため、firewalldを無効化
- インターネットに接続できる環境で実施
- 証明書作成用のRockey Linuxは事前に作成
手順
証明書の作成
1.ディレクトリ作成と移動
mkdir /harbor ; cd /harbor
2.CA証明書のプライベートキーを作成
openssl genrsa -out ca.key 4096
3.CA証明書の作成
※サブジェクトは所属している組織に合わせて修正が必要です。
openssl req -x509 -new -nodes -sha512 -days 3650 \ -subj "/C=CN/ST=Tokyo/L=Tokyo/O=example/OU=Personal/CN=yourdomain.com" \ -key ca.key \ -out ca.crt
4.プライベートキーの作成
openssl genrsa -out yourdomain.com.key 4096
5.CSRの作成
※サブジェクトは所属している組織に合わせて修正が必要です。
openssl req -sha512 -new \ -subj "/C=CN/ST=Tokyo/L=Tokyo/O=example/OU=Personal/CN=yourdomain.com" \ -key yourdomain.com.key \ -out yourdomain.com.csr
6.x509 v3 拡張ファイルの作成
cat > v3.ext <<-EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] IP.1=<IPアドレス> DNS.1=yourdomain.com DNS.2=yourdomain DNS.3=harbor EOF
7.v3.extファイルを使用して証明書の作成
openssl x509 -req -sha512 -days 3650 \ -extfile v3.ext \ -CA ca.crt -CAkey ca.key -CAcreateserial \ -in yourdomain.com.csr \ -out yourdomain.com.crt
harborのデプロイ
1.vSphere Clientを開く
2.ESXiホストのインベントリを右クリックし、「OVFテンプレートのデプロイ」をクリックする。
3.「ローカルファイル」をチェックし、「ファイルのアップロード」をクリックする。
4.対象のOVAを選択し、「開く」をクリックする。
5.「OVFテンプレートの選択」画面で「次へ」をクリックする。
6.仮想マシン名を変更し、配置先を選択して、「次へ」をクリックする。
7.配置先のESXiを選択して、「次へ」をクリックする。
8.「詳細の確認」画面は、「次へ」をクリックする。
9.「使用許諾契約書」画面は、「すべての使用許諾契約書に同意します。」にチェックを入れ、「次へ」をクリックする。
10.「データストア」を選択し、必要に応じて、ディスクフォーマットを変更して、「次へ」をクリックする。
11.「ネットワークの選択」画面は必要に応じてポートグループを変更して「次へ」をクリックする。
12.「テンプレートのカスタマイズ」画面は以下を入力して「次へ」をクリックする。
# | 設定項目 | パラメータ |
1 | Root Password (required) | <パスワードを入力> |
2 | Allow SSH via Root | チェック有 |
3 | Hostname | IPアドレス 例:192.168.xxx.xxx |
4 | Administrator Password (required) | <パスワードを入力> |
5 | Harbor Database Password | <パスワードを入力> |
7 | Enable Harbor Default Scanner | チェック無 |
8 | Use Self-signed Certificate For Harbor | チェック無 |
9 | CA Certificate | ca.crtのcatコマンドで表示される内容を入力 |
10 | Server Certificate | yourdomain.com.csrのcatコマンドで表示される内容を入力 |
11 | Server Key | yourdomain.com.keyのcatコマンドで表示される内容を入力 |
12 | IP Address | <IPアドレス> |
13 | Subnet Mask | <ネットネットマスク> |
14 | Gateway | <ゲートウェイのIPアドレス> |
15 | DNS | <DNSのIPアドレス> |
16 | DNS Domain | <ドメイン名> |
14.「最近のタスク」画面で「OVFテンプレートのデプロイ」が「完了」となっていることを確認する。
15.デプロイした仮想マシンを右クリックし「電源」-「パワーオン」をクリックする。
docker pushの実施
1.dockerのrepoを登録
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
2.dockerのインストール
※対話は全て「y」を押下する。
dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
3.dockerの起動と自動起動設定
systemctl enable --now docker
4.dockerクライアントの証明書配置ディレクトリを作成
mkdir -p /etc/docker/cert.d/192.168.222.185:443
5.dockerクライアントが使用する証明書の名称変更
mv yourdomain.com.crt yourdomain.com.cert
6.dockerクライアントが使用する証明書の配置
cp ca.crt yourdomain.com.cert yourdomain.com.key /etc/docker/cert.d/<IPアドレス>:443/
7.systemctlのdaemon-reload
systemctl daemon-reload
8.dockerの再起動
systemctl restart docker
9.nginxをdocker pull
docker pull nginx
10.nginxのtag変更
docker tag nginx:latest <IPアドレス>:443/library/nginx:latest
11.harborへのログイン
docker login <IPアドレス>:443
12.docker pushの実行
docker push 192.168.222.120:443/library/nginx
コメント