使用 Macvlan 的容器间歇性失联 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
libook
V2EX    Docker

使用 Macvlan 的容器间歇性失联

  •  
  •   libook 2023-10-16 16:08:49 +08:00 1350 次点击
    这是一个创建于 792 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一台 PC 作为家用服务器使用,上面使用 Docker 跑了若干容器。

    由于防火墙和透明代理配置的需要,需要部分容器使用独立 IP 来跑,并在相关规则中添加这些 IP 的规则。 于是我开始使用 Docker 提供的 macvlan 功能,创建了一个 macvlan 类型的 network ,相关容器配置使用这个 network ,并指定独立 IP 。

    容器创建出来后是可以按照预期运行的,在其他设备访问这些 IP 也都可以正确访问到这些容器。

    问题是在这些容器开始建立一些网络连接后,这些容器就会变得不可访问,直到连接断开才重新恢复访问。容器本身的运行状态正常(无闪退、死机)。其他非 macvlan 容器访问正常。

    举个例子,用容器跑 aria2 或 transmission ,没有任务的时候可以正常访问,添加任务后,当任务与一定数量节点建立联系后,aria2 或 transmission 的 RPC API 就无法访问,直到任务完成后又恢复访问。

    不光从容器外部访问会失联,使用 docker exec 进入到正在运行的容器内部,执行 curl 127.0.0.1 也会失联或延迟数十秒返回结果。

    如何排查问题可能出在哪?

    系统情况:

    • 平台:AMD64
    • 宿主系统:Debian 11
    • 内核版本:5.10.0-25-amd64
    • Docker 版本:24.0.6
    • containerd 版本:1.6.24
    • runc 版本:1.1.9
    • docker-init 版本:0.19.0
    • 网卡接口 MTU:1500
    • Docker 内 macvlan 网络 MTU:1400 ( com.docker.network.driver.mtu )
    • ulimit:1048576
    • sysctl net.core.somaxconn:4096
    • /proc/sys/net/ipv4/tcp_max_syn_backlog:4096
    zljklang
        1
    zljklang  
       2023-10-30 15:20:44 +08:00
    用网桥
    libook
        2
    libook  
    OP
       2023-10-30 16:42:05 +08:00
    @zljklang #1 可以具体说明配置什么样的网桥吗?
    因为需要独立 IP ,所以没有使用 docker 默认的网桥网络,而是用了 macvlan ,我需要确保从外面用容器自己的 IP 访问容器。
    zljklang
        3
    zljklang  
       2023-10-31 09:30:53 +08:00
    docker network create kind -o com.docker.network.bridge.default_bridge=true -o com.docker.network.bridge.enable_icc=true -o com.docker.network.bridge.enable_ip_masquerade=true -o com.docker.network.bridge.host_binding_ipv4=0.0.0.0 -o com.docker.network.bridge.name=vmbr0 -o com.docker.network.driver.mtu=1500 --driver bridge --subnet 192.168.3.33/27 --gateway 192.168.3.254
    zljklang
        4
    zljklang  
       2023-10-31 09:33:36 +08:00
    先手动命令新建网桥 vmbr0 ,在执行上面这个命令,--gateway 网关就填网桥 ip
    libook
        5
    libook  
    OP
       2023-10-31 11:10:34 +08:00
    @zljklang #3 还没试,有两个疑问:
    1. 我需要容器拥有一个与宿主机并列的独立 IP ,因为路由器要根据这个独立 IP 来添加规则,不能用 docker 宿主机的 IP ,否则会把宿主机上其他使用网桥的容器也一并按规则处理了。这个指令看起来是在 docker 宿主机内部创建了一个子网,是不是说最终还是是的使用 docker 宿主机的 IP+容器端口来访问容器?
    2. 在宿主机上执行 docker exec 进入容器内部,在容器内部 curl 容器上服务进程所监听的端口( 127.0.0.1:端口号),依然会出现与外部访问一样的失联问题,我理解在容器内部访问容器本地端口应该是走的容器内的 lo interface ,而不是任何其他宿主机上创建的网桥或 macvlan ,依然会出现失联问题的话,会不会是更底层的网络管理或实现方面的问题?
    libook
        6
    libook  
    OP
       2023-10-31 11:11:59 +08:00
    @zljklang 我路由器是个独立硬件设备,不运行在 docker 宿主机上。
    zljklang
        7
    zljklang  
       2023-10-31 11:18:49 +08:00
    会分到路由器给的 IP ,路由器上也能看到 ip
    zljklang
        8
    zljklang  
       2023-10-31 11:20:06 +08:00
    或者可以不用改,直接在路由上添加静态路由也可以直接访问容器 ip ,这个要在宿主机上开启包转发功能。
    zljklang
        9
    zljklang  
       2023-10-31 11:27:24 +08:00
    那是不是是你服务的问题,curl 127.0.0.1 也有问题
    libook
        10
    libook  
    OP
       2023-10-31 11:37:39 +08:00
    @zljklang #9 试过 Transmission 和 aria2 ,都有这个问题,但以 bridge 网络来跑就没有问题,用 macvlan 跑就有问题,让我不禁怀疑是不是当前内核版本底层的网络实现有 bug 。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5597 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 02:30 PVG 10:30 LAX 18:30 JFK 21:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86