macOSで動かしているPodmanにSSLの証明書を登録する
こんばんは、情報システム部の夏目です。
macOSでコンテナを動かすのにPodmanを使っています。
先日イメージをプルするHTTPSの通信のためにSSL証明書を登録しないといけなくなったのですが、少し設定に手間取ったので共有します。
CLIで明示的に指定する場合
$ podman pull --cert-dir=/path/to/my/certs myregistry.example.com/myimage:latest
# もしくは
$ podman image pull --cert-dir=/path/to/my/certs myregistry.example.com/myimage:latest
イメージをプルするとき --cert-dir というオプションで証明書を置いているディレクトリを指定することができます。
指定したディレクトリに *.crt, *.cert, *.key という名前のファイルを置くことで証明書として認識されます。
ただ、毎回指定する必要があるので少し面倒です。
per-registry 証明書ディレクトリ
Podmanではレジストリ毎に証明書を事前に置いておくことができます。
- システム全体:
/etc/containers/certs.d/<registry-hostname>[:<port>]/ - ユーザー単位:
~/.config/containers/certs.d/<registry-hostname>[:<port>]/
証明書のファイルはCLIで指定するときと同様に *.crt などです。
手こずったこと
最初、自分はmacの ~/.config/containers/certs.d/<registry-hostname>[:<port>]/ に証明書を置きました。
しかし、イメージをプルしようとしてもエラーが出てプルできませんでした。
(ここでは quay.io というレジストリに対して設定をします)
$ podman image pull hello-world
Resolved "hello-world" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull quay.io/podman/hello:latest...
Error: unable to copy from source docker://quay.io/podman/hello:latest: initializing source docker://quay.io/podman/hello:latest: pinging container registry quay.io: Get "https://quay.io/v2/": tls: failed to verify certificate: x509: certificate signed by unknown authority
何がダメだったのか
macOSの場合、PodmanはLinux VMであるPodman Machineの中でイメージのプルを行います。
そのため、mac側 (ホスト)に証明書を置いたとしても、プル実行時には参照されませんでした。
プルのときに証明書を参照させるにはPodman Machineの中に証明書を置く必要があります。
配置する
まず最初にPodman Machineに入って配置するディレクトリを作ります。
$ podman machine ssh
$ sudo mkdir -p /etc/containers/certs.d/quay.io
$ exit
ここではシステム全体用のディレクトリを作成し、SSHセッションを抜けます。
次にmac(ホスト)側からPodman Machineにファイルを転送します。
$ podman mqachine ssh "sudo tee /etc/containers/certs.d/quay.io/ca.crt" \
< /path/to/ca.crt
一応配置できたかどうかを確認します。
$ podman machine ssh "ls -la /etc/containers/certs.d/quay.io/"
total 328
drwxr-xr-x. 2 root root 20 Jun 29 15:51 .
drwxr-xr-x. 4 root root 38 Jun 29 15:53 ..
-rw-r--r--. 1 root root 334622 Jun 29 15:51 ca.crt
配置されていることがわかります。
イメージをプルして、きちんと動くことを確認します。
$ podman image pull hello-world
Trying to pull quay.io/podman/hello:latest...
Getting image source signatures
Copying blob sha256:1ff9adeff4443b503b304e7aa4c37bb90762947125f4a522b370162a7492ff47
Copying config sha256:83fc7ce1224f5ed3885f6aaec0bb001c0bbb2a308e3250d7408804a720c72a32
Writing manifest to image destination
83fc7ce1224f5ed3885f6aaec0bb001c0bbb2a308e3250d7408804a720c72a32
きちんと動きました。
まとめ
以上、mac上のPodmanでSSL証明書を設定した話でした。
VM上で動かしているのでVM側に設定が必要だとなかなか気づけずに対処に苦労しました。
何かの役に立てたら幸いです。







