k8s 网络工具:用于集群外节点访问 pod ip,有直接路由和隧道两种方式 - V2EX
yuyu01

k8s 网络工具:用于集群外节点访问 pod ip,有直接路由和隧道两种方式

  •  
  •   yuyu01 Aug 7, 2023 2636 views
    This topic created in 1015 days ago, the information mentioned may be changed or developed.

    学习和使用 k8s 一段时间了,以下是学习过程中开发的两个小项目,希望能够得到大家的批评和指正,顺便点个 star !

    出发点是,在云原生转型过程中,部分应用实例部署在常规虚拟机(192.168.0.0/16)中,部分应用实例部署在 k8s 中(10.233.0.0/16)中,正常情况下,常规虚拟机中的应用无法访问 k8s 中的应用实例。因此开发了这个小工具以同步 calico 路由信息,使常规虚拟机可以访问 pod ip, 使云原生转型更加平滑。

    目一:calico-route-sync

    简介

    相同网络下,k8s 集群外的节点同步 calico 路由信息,以直接访问 pod ip

    img.png

    用法

    bin:

    sudo ./calico-route-sync --kubecOnfig=/home/root/.kube/config 

    docker:

    docker run --rm -it --network=host --cap-add NET_ADMIN -v ~/.kube/config:/root/config q946666800/calico-route-sync:0.1 --kubecOnfig=/root/config 

    注意

    使用场景比较有限,仅支持 calico ,且 vm-01 与 k8s 节点处于同一网络。

    优点是简单、高效、稳定(类似 Calico 节点)。流量直接从 vm-01 流向 k8s 节点,无需经过其他路由器或隧道。

    如果您希望 vm-01 可以处于不同的网络中,可以使用项目k8s-tun

    项目二:k8s-tun

    简介

    k8s 集群外的节点访问 pod ip, service ip

    img.png

    用法

    服务端

    kubectl apply -f https://raw.githubusercontent.com/yzxiu/k8s-tun/master/deploy.yaml 

    客户端

    Linux & Mac

    # download client wget https://github.com/yzxiu/k8s-tun/releases/download/0.86-3/client-darwin-amd64-086-3 chmod +x client-linux-amd64-086-3 # start client sudo ./client-linux-amd64-086-3 -s <k8s-node-ip>:30011 

    Windows

    download [client-windows-amd64-086-3.exe]( https://github.com/yzxiu/k8s-tun/releases/download/0.86-3/client-windows-amd64-086-3.exe) install the attached tap-windows-9.24.2-I601-Win10 driver right click `client-windows-amd64-086-3.exe` and run as administrator 

    注意

    优点:理论上支持所有 cni 插件,vm-01 可以与 k8s 集群处于不同网络,使用比较灵活。客户端无需配置 kubeconfig

    缺点:流量通过隧道传输(类似于 openvpn),效率较低。

    隧道实现参考了 https://github.com/net-byte/vtun

    15 replies    2024-12-19 10:18:02 +08:00
    ysicing
        1
    ysicing  
       Aug 7, 2023
    为啥不是直接打通 pod/svc cidr 呢?
    yimiaoxiehou
        2
    yimiaoxiehou  
       Aug 7, 2023 via Android
    挺好的,我都说 wireguard 完事
    kknd22
        3
    kknd22  
       Aug 7, 2023
    限定 pod 访问外部的 IP 用什么方法呢?
    yuyu01
        4
    yuyu01  
    OP
       Aug 8, 2023
    @ysicing 项目一模拟 calico node ,将各个不同的小网段路由到不同的节点,有多少个 blockaffinity 就有多少条路由。
    项目二是通过隧道,就是直接 打通 pod/svc cidr ,一般就只需要加两条路由。
    yuyu01
        5
    yuyu01  
    OP
       Aug 8, 2023
    ln33653
        6
    ln33653  
       Aug 8, 2023
    挺好的,简单明了,集群外到集群内的方式比 kt-connect 简单不少,可以更进一步搞个拦截集群内流量到本地的功能,就完美了
    nayihz
        7
    nayihz  
       Aug 10, 2023
    calico 是用的 ipip 吗? calico-route-sync 这个项目中,在 vm 中添加的路由是走的哪张网卡出去的?
    yuyu01
        8
    yuyu01  
    OP
       Aug 10, 2023
    @latteczy calico-route-sync 这个项目只能在通个网络下使用,走的是对应网络的网卡。

    ```
    Kernel IP routing table
    Destination Gateway Genmask Flags Metric Ref Use Iface
    0.0.0.0 192.168.4.2 0.0.0.0 UG 600 0 0 wlp4s0
    10.233.74.0 192.168.4.32 255.255.255.192 UG 0 0 0 wlp4s0
    10.233.100.192 192.168.4.33 255.255.255.192 UG 0 0 0 wlp4s0
    10.233.114.128 192.168.4.34 255.255.255.192 UG 0 0 0 wlp4s0
    10.233.122.192 192.168.4.31 255.255.255.192 UG 0 0 0 wlp4s0
    192.168.4.0 0.0.0.0 255.255.255.0 U 600 0 0 wlp4s0
    ```

    这个项目曾经做过兼容 calico 的 ipip 模式,会复杂很多,还需要给每个外部节点分配一个虚拟 ip ,在 k8s 集群部署一个 daemonSet ,用来处理 ipip 流量。感觉复杂了许多,不太适合生产使用。后面就去掉了。
    yuyu01
        9
    yuyu01  
    OP
       Aug 10, 2023 via Android
    上面说错了,k8s 集群部署一个 daemonSet ,应该是用来维护流量返回外部节点的 ipip 路由,
    nayihz
        10
    nayihz  
       Aug 10, 2023
    > 这个项目只能在通个网络下使用
    啥叫`通个网络`?是指不需要封包的二层网络吧?那这个限制就太大了,基本没什么用处了。
    yuyu01
        11
    yuyu01  
    OP
       Aug 10, 2023
    @latteczy
    同个网络。是的,限制就太大了。
    nayihz
        12
    nayihz  
       Aug10, 2023
    @yuyu01 #11 在 vm 上建个 ipip 隧道,发包的时候也用 ipip 封包就可以突破这个限制吧?
    nayihz
        13
    nayihz  
       Aug 10, 2023
    @latteczy #12 想了一下不行,封包的源 IP 没法弄
    kknd22
        14
    kknd22  
       Aug 11, 2023
    @yuyu01
    感觉梳理策略和管理起来会比较麻烦
    adamwhite
        15
    adamwhite  
       Dec 19, 2024
    --kubecOnfig=/home/root/.kube/config

    config 这个文件里面应该写哪些内容呢
    About     Help     Advertise     Blog     API     FAQ     Solana     2921 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 46ms UTC 13:12 PVG 21:12 LAX 06:12 JFK 09:12
    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