nftables配下ではPodmanでコンテナを動かせない話
CentOS8と言えば、目玉のひとつはnftablesですよね。
従来のiptablesに取って代わったnftables、始めはとっつきにくかったんですけど、慣れてくるとちょっとしたプログラミング言語感覚で設定をコーディングできるところがあって、個人的にはかなり好印象な感じです。
ですが、ここで残念なお知らせです。
nftablesでファイアウォールを張っていると、Podmanでコンテナが動かせません。
なんですとぉ!? って、思いますよね。でも、私が確認した限りではこれは事実です。
実際にやってみましょう。まず、firewalldを落として、nftablesを起動している状態を確認します。
$ systemctl is-active nftables
active
$ systemctl is-active firewalld
inactive
この状態で、ネットワーク周りの設定も何もしないまま、Podmanでコンテナを起動します。
$ sudo podman run -d \
> -v /etc/php:/usr/local/etc \
> -v /home/virtual:/var/www/html \
> --name php-fpm \
> localhost/php-fpm:hogehoge
ERRO[0000] Error adding network: failed to list iptables chains: running [/sbin/iptables -t filter -S --wait]: exit status 1: iptables v1.8.4 (nf_tables): table `filter' is incompatible, use 'nft' tool.
ERRO[0000] Error while adding pod to CNI network "podman": failed to list iptables chains: running [/sbin/iptables -t filter -S --wait]: exit status 1: iptables v1.8.4 (nf_tables): table `filter' is incompatible, use 'nft' tool
起動しません。がーん。
見たところ、nftables配下でありながらiptablesのコマンドを実行しようとして、「そんなの知らん、nftを使え」と弾かれている様子です。そりゃそうですよね。
で、なんでこんな事態になっているのか、調べてみました。
すると、まるっとそのまま同じ内容の issue が見つかりました。
https://github.com/containers/podman/issues/5569
うんうん、そうですよね。
で、これがバグとして報告されているのですが、開発者側は
This should be an issue with cni, not with podman.
https://github.com/containernetworking/plugins
「これはCNIの問題であって、Podmanの問題ではない」という、にべもないご見解。
で、その回答に示されたURLを見てみると、CNIのプラグインの説明にこんな一文がありました。
firewall: A firewall plugin which uses iptables or firewalld to add rules to allow traffic to/from the container.
iptablesかfirewalldを使って・・・・・・だそうです。nftablesはお呼びでない、と。にょがーん。
つまり、Podmanを使いたければ、iptablesかfirewalldを使え、ということです。CentOS8はもはやiptablesを使っていませんから、firewalld一択ということになります・・・・・・んがー!!!
この事実を知った時は、モニタに向かって思わずFワードを口走ってしまいましたよ。くそー、せっかくnftablesを勉強して好きになりかけていたのに、なんでわざわざfirewalldを使わねばならんのか・・・・・・(firewalld派の方々、ごめんなさい)。
というわけで、
$ sudo systemctl stop nftables
$ sudo systemctl start firewalld
$ systemctl is-active nftables
inactive
$ systemctl is-active firewalld
active
$ sudo podman run -d \
> -v /etc/php:/usr/local/etc \
> -v /home/virtual:/var/www/html
> --name php-fpm \
> localhost/php-fpm:hogehoge
75bc1db1d111383842fbd545d327ca2a6903b2e5ed6c8c4ebe8f6f7d4bebd584
$ sudo podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
75bc1db1d111 localhost/php-fpm:hogehoge php-fpm 20 seconds ago Up 19 seconds ago php-fpm
はい、ちゃんと動きましたよ。まったくもう。