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

如何通过 vpn 实现本地电脑与 k8s 集群的 Pod 互通

  •  
  •   NipGeihou · 2022-11-05 04:11:20 +08:00 · 2724 次点击
    这是一个创建于 748 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我将 nacos 、微服务网关部署在服务器上的 k8s 集群,又在集群中部署了 WireGuard 用来组网,但操作发现连上 vpn 后,本地电脑可以访问 k8s 上的资源,但 k8s 上的 pod 无法访问本地电脑。

    具体问题:在连接 vpn 下,本地电脑运行一个微服务,并注册到 k8s 上的 nacos ,请求微服务网关,无法转发到本地电脑。

    猜测原因:WireGuard 收不到微服务网关发送的数据,需要添加路由表将10.8.0.0/24转发到 WireGuard 容器 IP ,但没找到 Calico 添加路由表的文档。

    请教,怎么解决上述问题,似乎通过划分路由表也不太好,容器的 ip 改了就不行了

    9 条回复    2022-11-06 13:21:59 +08:00
    uncat
        1
    uncat  
       2022-11-05 08:24:44 +08:00
    打通 k8s 集群所在局域网和家庭局域网. 分别在彼此局域网的路由表内添加路由规则.

    家庭局域网设备访问 pod: 本地设备 -> 默认网关 -> 本地 wireguard -> k8s 集群中的一台 node 服务器上的 wireguard -> pod
    pod 访问家庭局域网设备: pod -> 默认网关 -> k8s 集群中的一台 node 服务器上的 wireguard -> 本地 wireguard -> 本地设备
    maja
        2
    maja  
       2022-11-05 09:56:16 +08:00
    有个这玩意 https://www.telepresence.io/ 不知道是不是你想要的
    sujin190
        3
    sujin190  
       2022-11-05 10:05:27 +08:00 via Android
    宿主机能改路由表的话,其实流量都要经过宿主机,可以考虑把 vpn 放到外部直接改宿主机路由表或者 nat

    或者装个 demonset 给 root 权限来操作宿主机路由表也行吧
    sujin190
        4
    sujin190  
       2022-11-05 10:15:29 +08:00 via Android
    如果 vpn 不想装到外部,其实可以考虑固定到一台宿主机上,vpn 创建的虚拟网卡宿主机也看得到吧

    似乎 k8s 网络似乎只是用虚拟网卡和不同网络空间组了虚拟网络,路由和 nat 应该是由宿主机的网络栈提供的,所以操作宿主机路由表和 nat 就行吧
    NipGeihou
        5
    NipGeihou  
    OP
       2022-11-05 15:33:33 +08:00
    @sujin190 感谢,"vpn 创建的虚拟网卡宿主机也看得到吧"提示了我,才发现我把 node1 和 node2 的 ssh 连接名称对调了,连接到正确的宿主机后,确实能在 ip addr 看到那个 vpn 里的虚拟网卡 wg0 。

    但我发现即便在 vpn 的宿主机 ping 本地电脑 ip 也无法 ping 通,而在 vpn pod 里是可以的
    NipGeihou
        6
    NipGeihou  
    OP
       2022-11-05 15:41:33 +08:00
    @maja 我有试过 ktctl ,但我没有把 k8s 暴露在公网,我还是需要通过 vpn 连到 k8s 集群所在网络才可以使用,并且他需要 kubeconfig ,但我目前的场景只需要实现互通就可以了。
    sujin190
        7
    sujin190  
       2022-11-05 17:15:36 +08:00 via Android
    @NipGeihou 那估计 wg0 是在容器的网络空间创建的吧,宿主机看的时候是不是没 ip ,pod 里看有 ip ?但路由表配置逻辑应该是一样的吧,下一跳需要先到 pod 的 ip
    NipGeihou
        8
    NipGeihou  
    OP
       2022-11-06 01:18:32 +08:00
    @sujin190 又折腾了一天,发现宿主机的 wg0 是之前配置了 hostNetwork: true 出现的,后面改回 false 并没有自动删除,所以其实是不通的。

    后面我又改成了 hostNetwork: true ,在宿主机下能够 ping 通本地电脑 ip ,但其他 node 添加了路由表,还是无法 ping 通本地电脑,vpn 网络变得十分的差,但感觉方向应该是这个方向。

    因为还要做其他工作,就先不折腾这个,先用 vpn+KtConnect 将流量转发到本地
    novolunt
        9
    novolunt  
       2022-11-06 13:21:59 +08:00
    你的网络使用的是 wg0 ,也就是原程,那就没办法转发到本地,除非你设定路由不让内网走远程
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   969 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:48 · PVG 04:48 · LAX 12:48 · JFK 15:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.