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

はい、ちゃんと動きましたよ。まったくもう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください