2025.12.16:AWXの場合を追記
AAP(Ansible Automation Platform)のAutomation Controller標準機能の設定で(Container Registryの認証情報でSSL検証をオフにしておけば)できると思っていたら実はできなかったので、回避策について調べてみた。
結論としては、ジョブのコンテナが動作するランタイムであるPodmanの設定で、pullしたいレジストリに対するinsecure設定を行えばOK
場合分けして説明しているが、内容は同じ。ただし公式手順ではないと思うので、「こうやったら動いた」という情報。
設定がなければTLS Verifyのエラーになる
tls: failed to verify certificate: x509: certificate signed by unknown authority
証明書にCNを使っていると以下
tls: failed to verify certificate: x509: certificate relies on legacy Common Name field, use SANs instead
なお、文中のinsecureなレジストリはmy-registry.local.example.org:5000とする。
Podmanが動作するユーザー限定で設定
RPM版AAP (AAP 2.4-13で確認)
RPM版のAAPは、デフォルトではホストOSのawxユーザーで動作し、ジョブを起動した際はawxユーザー権限でコンテナがデプロイされる。
よって、awxユーザーで対象レジストリをinsecureでも許容するように認識されていれば良い。
awxユーザー限定でinsecureなレジストリアクセスを許容するには、以下設定の$HOME/.config/containers/registries.confを作成する。
[registries.insecure] registries = ['my-registry.local.example.org:5000']
設定確認は以下。これはファイルを作成すれば即時反映される。
[awx@rhel9-dev3 ~]$ id
uid=985(awx) gid=985(awx) groups=985(awx),984(receptor),986(nginx),987(redis) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[awx@rhel9-dev3 ~]$ podman info -f json | jq '.registries'
{
"my-registry.local.example.org:5000": {
"Prefix": "my-registry.local.example.org:5000",
"Location": "my-registry.local.example.org:5000",
"Insecure": true,
"PullFromMirror": "",
"Mirrors": [],
"Blocked": false,
"MirrorByDigestOnly": false
}
}
この状態になれば、対象レジストリからイメージpullがawxユーザーで成功するので、ジョブは正常に動作する。
コンテナ版AAP (containerized AAP 2.5-18 / 2.6-2で確認)
コンテナ版のAAPはRPM版と異なり、インストールを実施したユーザー権限のPodmanで動作する。また、ジョブのコンテナはホストOS上でなく、AAPのコンポーネントの一つであるreceptorコンテナ内にデプロイされる(Podman in Podman構成)
よって、receptorコンテナ内で上記と同様にinsecureレジストリ設定が必要になる。
が、receptorコンテナ内の設定をデプロイ後に編集できるのか??という疑問はあったが、幸いというかそういう仕様なのか、ホストOSのPodman設定がreceptorコンテナ内のPodman設定に貫通しているため、RPM版同様にホストOSでinsecureレジストリを許容するように設定すればOK
awxユーザーではなく、AAPをインストールしたユーザーで$HOME/.config/containers/registries.confを作成する。
[registries.insecure] registries = ['my-registry.local.example.org:5000']
ファイルを作成すると、receptorコンテナ内のpodman infoでも即時反映を確認できる。(なのでコンテナ起動時の状態でなく、ホストOSの設定を直接参照していると思われる)
[zaki@rhel10-dev3 ~]$ podman exec receptor podman info -f json | jq '.registries'
{
"my-registry.local.example.org:5000": {
"Blocked": false,
"Insecure": true,
"Location": "my-registry.local.example.org:5000",
"MirrorByDigestOnly": false,
"Mirrors": [],
"Prefix": "my-registry.local.example.org:5000",
"PullFromMirror": ""
}
}
システムワイドに設定する
ユーザー単位でなくシステムワイドにレジストリ設定をするには/etc/containers/registries.confに設定する。
と言いたいとこだけど、ドロップイン用のディレクトリが/etc/containers/registries.conf.dにあるので、このディレクトリに専用ファイルを作成する方が良い。ファイル名は.confが付いていればなんでもよい(以下、/etc/containers/registries.conf.d/insecure-registry.confとする)
ただし、前述同様の設定内容だと下記エラーが出力される。
Error: getting registries: loading drop-in registries configuration "/etc/containers/registries.conf.d/insecure-registry.conf": registry must be in v2 format but is in v1
正しくは、v2形式の書式で書く必要があり、以下のように記述すればOK
$ cat /etc/containers/registries.conf.d/insecure-registry.conf [[registry]] location = "my-registry.local.example.org:5000" insecure = true
補足
コンテナ版AAPのホストOSのPodman設定がreceptorコンテナ内Podmanに貫通するこの動作はいつまで使えるかは不明。
ただ現状のreceptorコンテナ内のPodmanは、AAP2.5ではpodman-remote version 4.9.4-rhel、AAP2.6だとpodman-remote version 5.4.0が動作しており、名前からしてホストOSのpodmanを利用する形式だと思われるため、この方法が使えると考えてよさそう。
AAP2.5環境
[zaki@rhel10-dev3 ~]$ podman exec receptor podman --version podman-remote version 4.9.4-rhel [zaki@rhel10-dev3 ~]$ podman --version podman version 5.4.0 [zaki@rhel10-dev3 ~]$
AAP2.6環境
[zaki@rhel10-dev4 ~]$ podman exec receptor podman --version podman-remote version 5.4.0 [zaki@rhel10-dev4 ~]$ podman --version podman version 5.6.0 [zaki@rhel10-dev4 ~]$
AWXの場合
AWXはKubernetesで動作するので、「Kubernetesでinsecureなレジストリを使用する方法」の観点の設定が必要。
よってKubernetesディストリビューションによって異なる。
基本的にコンテナランタイムによってノードOSに設定を加える形になる。
K3sであれば/etc/rancher/k3s/registries.yamlでinsecureレジストリ設定が可能。
2025.12.16追記
K3sの場合の記述は以下の通り。
configs: "my-registry.local.example.org:5000": tls: insecure_skip_verify: true