firewalld を使用する場合の転送の有効化

firewalld​ は、iptables を補うファイアウォール管理ツールであり、永続的なネットワークトラフィックルールを定義できます。 Red Hat Enterprise Linux (RHEL) 7.x オペレーティングシステムで ​firewalld​ を使用している場合は、docker0 デバイスで転送を有効化する必要があります。 また、10.0.0.0/8 サブネットとの間でやり取りしているすべてのパケットを転送する必要もあります。

firewalld を使用しているかどうかを確認する方法

システムで firewalld を使用しているかどうかを確認するには、次のコマンドを実行します。

systemctl status firewalld.service

firewalld がインストールされている場合は以下の内容が返されます。

$ sudo systemctl status firewalld.service
* firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)

firewalld がインストールされていない場合は、エラーメッセージが返されます。

転送の有効化

docker0 デバイスで転送を有効化するには、次のコマンドを実行します。

firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 1 -o docker0 -j ACCEPT -m comment --comment "docker subnet"

firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 1 -s 10.0.0.0/8 -j ACCEPT -m comment --comment "docker subnet"

10.0.0.0/8 サブネットで転送を有効化するには、次のコマンドを実行します。

firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -s 10.0.0.0/8 -j ACCEPT -m comment --comment "docker subnet"

firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -d 10.0.0.0/8 -j ACCEPT -m comment --comment "docker subnet"

転送の確認

転送ルールが設定されていることを確認するには、次のコマンドを実行します。

firewall-cmd --permanent --direct --get-all-rules

出力は次の例のようになります。

ipv4 filter FORWARD 1 -o docker0 -j ACCEPT -m comment --comment 'docker subnet'
ipv4 filter FORWARD 1 -s 10.0.0.0/8 -j ACCEPT -m comment --comment 'docker subnet'
ipv4 filter INPUT 1 -s 10.0.0.0/8 -j ACCEPT -m comment --comment 'docker subnet'
ipv4 filter INPUT 1 -d 10.0.0.0/8 -j ACCEPT -m comment --comment 'docker subnet'
これらのルールはノードレベルです。つまり、firewalld がアクティブな場合に Runtime Fabric が正しく機能するようにするには、すべてのノード (コントローラーノードとワーカーノードの両方) でルールを実行して確認する必要があります。