V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhoudaiyu
V2EX  ›  Kubernetes

有个 K8s 跨集群通信的需求想请教下各位

  •  
  •   zhoudaiyu · 2023-12-08 20:20:43 +08:00 · 1801 次点击
    这是一个创建于 376 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如图所示,有两个在不同网段的 K8s 集群 cluster-A 与 cluster-B ,还有一个示例的两个集群外的客户端 hooc-172.1.2.1 ,这些集群的宿主机( phyhost-A 、phyhost-B )和客户端(hooc)都是三层互通的。现在的需求是:( 1 )两个集群之间的 Pod 可以通过对方的 Pod IP 互相访问;( 2 )某一个集群中的任何 Pod 或者再宿主机上可以访问另一集群的 service ( IP 形式);( 3 )集群外的客户端可以访问两个集群的任意 Service 或 Pod (都是 IP 形式)。请问目前有啥现成的方案可以支持吗?目前调研过:submariner 和 wireguard 。submariner 要求 kube-proxy 使用 iptables 模式,这个不太行,且项目较新,不知道有没有经过生产环境的考研;( 2 ) wiregurad 看上去应该能支持,也更成熟稳定一些。wireguard 也有几种模式,不知道 gateway 和 full mesh 选哪个好,而且 wireguard 貌似不是开箱即用的(配置较为复杂),而且对内核要求高。还有 2 个小需求如果满足最好:( 1 )对客户端和服务端的侵入尽可能小一些;( 2 )两个集群的 DNS 服务也能打通,可支持通过 DNS 访问不同集群的 Service 。
    13 条回复    2023-12-10 08:26:04 +08:00
    lrh3321
        1
    lrh3321  
       2023-12-08 21:19:01 +08:00
    Pod IP 互相访问,集群外的客户端通过 Pod IP 访问,都可以在上一级的网关上配静态路由规则来实现。service 的 Cluster IP 也是同理( Service-CIDR 要不重叠)。都在内网的,没有 IP 冲突的情况的话,不需要 wiregurad 。

    要 DNS 服务也能打通的话,那么最好两个集群的 cluster name 不一样,然后两边都根据 cluster name 来 forward 到对方
    suuuch
        2
    suuuch  
       2023-12-08 22:02:21 +08:00
    这个确实比较麻烦。。我这里的方案使用 API 网关直接替代掉 IP 访问。。缺点是侵入性比较大,各系统都要做调整。
    hallDrawnel
        3
    hallDrawnel  
       2023-12-08 23:01:01 +08:00
    不太确定,或许你需要 istio ?不过为了这个搞 istio 感觉不划算。
    tudou1514
        4
    tudou1514  
       2023-12-08 23:49:04 +08:00
    看了你的需求,我有个问题,两个集群的 pod 可以通过相互的 podip 访问?你怎么保证 pod 的 ip 是固定的?如果用 calico 来固定 podip ,那又怎么解决 pod 的 hpa 问题?我不太确定你的需求,但是如果是跨集群访问,为啥不用各自的 ingress 暴漏呢?
    defunct9
        5
    defunct9  
       2023-12-09 07:17:29 +08:00 via iPhone
    wg
    zhoudaiyu
        6
    zhoudaiyu  
    OP
       2023-12-09 07:23:02 +08:00 via iPhone
    @tudou1514 有注册中心,服务端新上线或者销毁会通知客户端,就是 Dubbo 那套
    zhoudaiyu
        7
    zhoudaiyu  
    OP
       2023-12-09 07:28:26 +08:00 via iPhone
    @lrh3321 就是两个宿主机网段之间的每跳路由都加上指向 Pod IP 的静态路由吧?这个确实可以考虑
    @suuuch 类似 apisix ?其实若是可以反向代理 dubbo 的请求就可以
    @hallDrawnel istio 的 multicluster 吧?这个也需要自己架 VPN
    @defunct9 这个和静态路由目前看还可以,有个问题就是需要服务端客户端的 Pod 改造吗? sidecar 这种
    suuuch
        8
    suuuch  
       2023-12-09 11:05:04 +08:00
    我们用的就是 api six ,这个优点是和 k8s 的集成度比较好。
    suuuch
        9
    suuuch  
       2023-12-09 11:07:33 +08:00
    这个场景上,对开发人员侵入小,就会让运维和平台人员的侵入比较大。。

    感觉上是一个取舍,目前我不知道有什么两全其美的办法,如果有的话,麻烦告诉我一下~
    zizon
        10
    zizon  
       2023-12-09 18:56:43 +08:00
    BGP 吧?
    ss098
        11
    ss098  
       2023-12-09 19:24:14 +08:00   ❤️ 1
    你想找的是不是:cilium cluster mesh
    CCIEliu
        12
    CCIEliu  
       2023-12-09 20:10:43 +08:00
    11 楼正确
    zhoudaiyu
        13
    zhoudaiyu  
    OP
       2023-12-10 08:26:04 +08:00 via iPhone
    @suuuch 如果用 apisix ,dubbo 的客户端,服务端应该是要改造一下吧
    @zizon 不在一个二层网络里面呢,忘记强调这一点啦
    @ss098 这个我去调研一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1047 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:34 · PVG 06:34 · LAX 14:34 · JFK 17:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.