服务隔离的必要性疑问、以及不同 Docker Host 之间通信的方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要把任何和邀请码有关的内容发到 NAS 节点。

邀请码相关的内容请使用 /go/in 节点。

如果没有发送到 /go/in,那么会被移动到 /go/pointless 同时账号会被降权。如果持续触发这样的移动,会导致账号被禁用。
sidkang
V2EX    NAS

服务隔离的必要性疑问、以及不同 Docker Host 之间通信的方案

  •  
  •   2022-08-14 10:19:40 +08:00 2482 次点击
    这是一个创建于 1230 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前的主机硬件及配置方案

    具体配置可以参考之前的帖子,大概的配置是 5950X+128G+若干存储,host 系统是 proxmox ,安装了若干 lxc 和 vm 。其中有一个 lxc 用作 docker host ,lxc 基本上以服务类型区分,网关、下载、文件服务等等。

    遇到的痛点

    配置混乱,维护困难。难以记忆。作为一台 nas ,基本上不遇到大问题,我是不会进入到 cli 来进行维护,这样造成很容易忘记一些配置容器时的参数,包括挂载路径、密码、用户等等,结果就是上新服务麻烦,维护旧服务也很麻烦;

    预想的解决方案

    通过 ansible 进行各种服务的安装,包括创建 lxc ,安装 /更新 lxc 环境相关组件,安装 docker 服务,创建 /启动 /更新相关容器。目前已经实现了一个 lxc+几个 docker 容器的配置,实验下来体验完好。接下来只要按部就班把需要的服务一个个写成 playbook 就好。

    新方案疑难

    1. 服务隔离。由于使用的配置性能较强,lxc+docker 套娃容器在 CPU 、硬盘性能上没有发现明显瓶颈,内存也够用,所以性能方面的 overhead 可以不用考虑,同时隔离后,我可以根据不同服务分别写一个 playbook ,可以进一步降低未来维护的心智成本;同时,隔离后也可以较为方便的对资源、权限进行加载、设置;所以是否有必要进行服务隔离呢,或者有什么弊端么?
    2. 容器通信。如果 1 中的答案是 yes ,那么接下来的问题是如何让各 lxc 以及其内的 docker 容器进行通信(因为打算数据库应用集中在一个容器、以及反代的需要),目前能想到的有两个方案
      • Docker Swarm 。将所有 lxc 的 docker 组成 swarm ,建立 overlay network 。不考虑 k3s 、k8s 等等,非运维人士,也不打算在这方面更进一步;
      • LXC Private Network over PVE Host 。在 PVE 上建立网桥,将所有 lxc 接入,所有 docker 容器配置为使用这个 interface ,网关容器使用所有 interface 。
      • 上述两个方案简单试了一下,网络性能也没有瓶颈,最慢也可以到 40G 水平,所以倒是不用考虑,配置方面因为使用 ansible ,所以也不是痛点。我能想到的是,通过第二种方式配置,lxc 之间也可以较为方便的通信,方便非 docker 方式安装的应用可以无痛使用。但是不太清楚这两种方式是否有较大的弊端?

    目前有这两大方面的疑问,提前感谢各位给予的各种建议。

    5 条回复    2022-08-15 06:40:42 +08:00
    ltkun
        1
    ltkun  
       2022-08-14 10:33:31 +08:00 via Android
    我就是这么干的 不过也越来越臃肿了 pve 非特权 lxc 里面开 docker 关于互访 我暂时没有考虑 docker 网络配置比较灵活 哪怕不是同一网络都可以通过主机不同端口通信 container 甚至都能得到家里网络的实际 ip
    sidkang
        2
    sidkang  
    OP
       2022-08-14 10:55:48 +08:00
    @ltkun 确实可以,我之所以想搞网络隔离还是希望能够通过白名单的方式来给其他人 /家里人用相关的服务,安全到还是其次,网络简单用的话还是因为这个有点不放心。
    ltkun
        3
    ltkun  
       2022-08-14 11:02:06 +08:00 via Android
    pve 隔离也很方便 因为它自带 VLAN 对于外网用户也可以用各种方式进行隔离 比如我用 openvpn 的不同配置来访问不同子网
    sidkang
        4
    sidkang  
    OP
       2022-08-14 13:52:26 +08:00
    @ltkun 嗯,是,隔离在 lxc 、docker 层面其实都挺方便的,vlan 确实也是个思路。
    ruidoBlanco
        5
    ruidoBlanco  
       2022-08-15 06:40:42 +08:00   4
    根据我的用法,大体说下:

    - 我的 pve 上跑三个 lxc docker host ,按功能分配容器:

    1. caja: jellyfin, heimdall, minio, node-red, paperless-ng, uptime-kuma ,总之各种家用服务
    2. arr: radarr, sonarr, tdarr, transmission, prowlarr ,wireguard ,下载一条龙
    3. adguard: adguardhome ,netinstallxyz ,算「基础设施」吧

    - 每个 docker host ,都是一个 docker-compose 拉起所有服务。容器间如果需要在同一个网络,那么就放同一个 lxc ,比如 rr 里面的东西。

    - 不同所有的配置文件,都在 pve 的同一个目录里,比如 /disk/backup/docker ,然后这个目录用 bind mount 的方式挂载到所有 lxc host 上,然后所有 docker 容器的 config 都写到这个目录里。 另有一个数据分区,在 caja 和 arr 都需要,/disk/media ,我也是 bind mount 挂载到两个 lxc 。

    - 所有的 docker-compose 文件,都在一台 vm 的同一个叫做 compose 的目录里管理,比如 caja 的在 compose/caja/docker-compose.yml ,切换子目录的时候,用 direnv 切换 DOCKER_CONTEXT 环境变量。这里当然需要先配置了 docker context 管理这些 lxc docker host 。

    我用法只用到 docker-compose ,完全不需要 swarm 或者 k3s 。也不需要 ansible ,docker host 只需要大体配好一台,pve 里做成 template ,以后就是 clone 的事情了。vlan 感觉也是加了没必要的复杂度。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2531 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 01:28 PVG 09:28 LAX 17:28 JFK 20:28
    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