求教 k8s 中 service、kubeproxy ipvs、flannel 的关联问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
main1234
V2EX    Kubernetes

求教 k8s 中 service、kubeproxy ipvs、flannel 的关联问题

  •  
  •   main1234 2024-05-18 15:03:07 +08:00 1996 次点击
    这是一个创建于 511 天前的主题,其中的信息可能已经有所发展或是发生改变。

    资源清单

     nodeA 192.168.1.1 nodeB 192.168.1.2 
     podA 在 nodeA 上 podIP 10.111.1.1 podB 在 nodeB 上 podIP 10.111.2.2 podC 在 nodeA 上 podIP 10.111.3.3 
     svc 管理 podA podB ,svcIP 为 10.111.4.1 svc endpoint 为 10.111.1.1 、10.111.2.2 

    疑问点在 podC 通过 svcIP 访问的流程,其中涉及了 flannel-UDP 、网桥、kubeproxy ipvs ,比较乱,想整体捋清下流程

    以下是我认为的流程

    发送 1.nodeA 上的 podC 发出向 svc 的流量,源地址 10.111.3.3 ,目标地址 10.111.4.1 ,根据容器内路由会走 cni0 网桥 2.cni0 和宿主机网卡建立 pair veth 关系,流量会出现在宿主机网卡 3.由于目的 ip 为一个 svc 地址,nodeA 上面的 kubeproxy 已经提前建立好的 iptables ,会做 DNAT 转换为 podA 、podB 的 IP 4.此时在 nodeA 上已经做了 DNAT ,相当于是 podC 请求 podB 的 IP(iptables 做负载均衡,假如负载到了 podB) 5.nodeA 根据路由将流量转到 flanned.0 ,TUN 到 flanned 6.flanned 通过 etcd 获取 podB IP 和 node 的关系,得到 podB 在 nodeB 上,封 UDP 包 7.此时 IP 包的源 IP 为 nodeA 、目的 IP 为 nodeB ,UDP 包的源 IP 为 podC 、目的 IP 为 podB ,用 nodeB 做 ARP ,经过内核将 UDP 发出 收包 1.流量到 nodeB 上的 flanne.0,TUN 到 flanned ,解包得出真正容器维度源 IP 、目的 IP 2.根据目的 IP 流转到 cni0 3.流到 podB 

    以上的流程有问题么???感觉 svc 经过 iptables 转换为 endpoint 中的 IP ,不太确定到底是发生在哪一步

    6 条回复    2024-05-18 22:34:43 +08:00
    druggo
        1
    druggo  
       2024-05-18 18:42:00 +08:00
    第 3 步,既然用 ipvs 模式,cluster ip 都在 ipvs 的虚拟网卡上(kube-ipvs0) ,不会经过 iptables 的,直接 ipvs 转发到 endpoint ip
    main1234
        2
    main1234  
    OP
       2024-05-18 18:53:53 +08:00
    @druggo 哦对对,我忘了,ipvs 不会使用 iptables ,有疑问就是 ipvs 会获取到这个转发的 ip ,然后会做一次 DNAT 吧??把 svc 的 clusterIP 换成 podIP ,然后走到 flanned.0 进而走到用户态的 flanned 对吧
    mayooot
        3
    mayooot  
       2024-05-18 20:48:05 +08:00
    假如你的 kube-proxy 模块用的 iptables 模式,然后我尝试回答一下你的疑问。
    假设现在一个 Service 下面有 2 个 Pod ,iptables 规则如下:
    ~~~
    -A KUBE-SERVICES -d 10.111.4.1/32 -p tcp -m comment --comment "default/hostnames: cluster IP" -m tcp --dport 80 -j KUBE-SVC-NWV5X2332I4OT4T3
    ~~~

    负载均衡规则和 DNAT 规则如下:
    ~~~
    -A KUBE-SVC-NWV5X2332I4OT4T3 -m comment --comment "default/hostnames:" -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-WNBA2IHDGP2BOBGZ
    -A KUBE-SVC-NWV5X2332I4OT4T3 -m comment --comment "default/hostnames:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-X3P2623AGDH6CDF3


    -A KUBE-SEP-WNBA2IHDGP2BOBGZ -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.244.1.7:9376
    -A KUBE-SEP-X3P2623AGDH6CDF3 -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.244.2.3:9376
    ~~~
    mayooot
        4
    mayooot  
       2024-05-18 20:49:43 +08:00
    @mayooot 我的回答是直接截取的一个 Service 下面 3 个 Pod 的 iptables 规则,可能和楼主说的对应不上。看个意思就行吧
    druggo
        5
    druggo  
       2024-05-18 22:10:29 +08:00
    guanzhangzhang
        6
    guanzhangzhang  
       2024-05-18 22:34:43 +08:00
    在非容器环境上实现散装的 IPVS SVC
    https://zhangguanzhang.github.io/2021/09/28/ipvs-svc/
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2609 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 06:19 PVG 14:19 LAX 23:19 JFK 02:19
    Do have faith in what you're doing.
    ubao 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