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

2022-11-05 04:11:20 +08:00
 NipGeihou

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

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

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

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

2444 次点击
所在节点    Kubernetes
9 条回复
uncat
2022-11-05 08:24:44 +08:00
打通 k8s 集群所在局域网和家庭局域网. 分别在彼此局域网的路由表内添加路由规则.

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

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

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

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

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

因为还要做其他工作,就先不折腾这个,先用 vpn+KtConnect 将流量转发到本地
novolunt
2022-11-06 13:21:59 +08:00
你的网络使用的是 wg0 ,也就是原程,那就没办法转发到本地,除非你设定路由不让内网走远程

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/892829

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX