名前空間間でpingを実行できますが、TCPを使用して接続することはできません。

名前空間間でpingを実行できますが、TCPを使用して接続することはできません。

互いに通信するために2つのネットワーク名前空間を設定しようとしています。私はns0それぞれvethペアを持つ2つの名前空間を設定しましたns1。ここで、 veth の名前空間以外の側はブリッジに接続されます。

これが私が設定した方法です:

ip link add veth0 type veth peer name brveth0
ip link set brveth0 up

ip link add veth1 type veth peer name brveth1
ip link set brveth1 up

ip link add br10 type bridge
ip link set br10 up

ip addr add 192.168.1.11/24 brd + dev br10

ip netns add ns0
ip netns add ns1

ip link set veth0 netns ns0
ip link set veth1 netns ns1



ip netns exec ns0    ip addr add 192.168.1.20/24 dev veth0
ip netns exec ns0    ip link set veth0 up
ip netns exec ns0    ip link set lo up

ip netns exec ns1    ip addr add 192.168.1.21/24 dev veth1
ip netns exec ns1    ip link set veth1 up
ip netns exec ns1    ip link set lo up


ip link set  brveth0 master br10
ip link set  brveth1 master br10

ns0期待どおりにインターフェイスにpingを送信できますns1

$ sudo ip netns exec ns1 ping -c 3  192.168.1.20
PING 192.168.1.20 (192.168.1.20) 56(84) bytes of data.
64 bytes from 192.168.1.20: icmp_seq=1 ttl=64 time=0.099 ms
64 bytes from 192.168.1.20: icmp_seq=2 ttl=64 time=0.189 ms

ただし、TCPを介して両方を接続することはできません。

たとえば、次のようにサーバーを実行しますns0

$ sudo ip netns exec ns0 python3 -m http.server 8080
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...

カールからカールできるようにしたいns1が、これはエラーを引き起こします。

$ sudo ip netns exec ns1 curl 192.168.1.20:8080
curl: (7) Failed to connect to 192.168.1.20 port 8080: No route to host

なぜこれが起こるのですか?

答え1

同様の状況が発生しました。フランネルを使用するk8sホストでは、podAは同じホスト上でpodBをpingできましたが、cni0のICMPリセットによってtcp接続がリセットされました。 iptables-savek8sのルールを表示します。みんな良く見えます。 nft list rulesetFirewalld が作成したルールを表示します。

table inet firewalld {

    chain filter_FORWARD {
        type filter hook forward priority filter + 10; policy accept;
        ct state { established, related } accept
        ct status dnat accept
        iifname "lo" accept
        ip6 daddr { ::/96, ::ffff:0.0.0.0/96, 2002::/24, 2002:a00::/24, 2002:7f00::/24, 2002:a9fe::/32, 2002:ac10::/28, 2002:c0a8::/32, 2002:e000::/19 } reject with icmpv6 addr-unreachable
        jump filter_FORWARD_ZONES
        ct state invalid drop
        reject with icmpx admin-prohibited
    }

ファイアウォールサービスを停止した後、すべてがうまくいきました。 systemctl stop firewalld したがって、他のサービスやカーネルモジュールもnetfilerを使用していることを確認してください。

関連情報