我将 nacos 、微服务网关部署在服务器上的 k8s 集群,又在集群中部署了 WireGuard 用来组网,但操作发现连上 vpn 后,本地电脑可以访问 k8s 上的资源,但 k8s 上的 pod 无法访问本地电脑。
具体问题:在连接 vpn 下,本地电脑运行一个微服务,并注册到 k8s 上的 nacos ,请求微服务网关,无法转发到本地电脑。
猜测原因:WireGuard 收不到微服务网关发送的数据,需要添加路由表将10.8.0.0/24
转发到 WireGuard 容器 IP ,但没找到 Calico 添加路由表的文档。
请教,怎么解决上述问题,似乎通过划分路由表也不太好,容器的 ip 改了就不行了
1
uncat 2022-11-05 08:24:44 +08:00
打通 k8s 集群所在局域网和家庭局域网. 分别在彼此局域网的路由表内添加路由规则.
家庭局域网设备访问 pod: 本地设备 -> 默认网关 -> 本地 wireguard -> k8s 集群中的一台 node 服务器上的 wireguard -> pod pod 访问家庭局域网设备: pod -> 默认网关 -> k8s 集群中的一台 node 服务器上的 wireguard -> 本地 wireguard -> 本地设备 |
2
maja 2022-11-05 09:56:16 +08:00
有个这玩意 https://www.telepresence.io/ 不知道是不是你想要的
|
3
sujin190 2022-11-05 10:05:27 +08:00 via Android
宿主机能改路由表的话,其实流量都要经过宿主机,可以考虑把 vpn 放到外部直接改宿主机路由表或者 nat
或者装个 demonset 给 root 权限来操作宿主机路由表也行吧 |
4
sujin190 2022-11-05 10:15:29 +08:00 via Android
如果 vpn 不想装到外部,其实可以考虑固定到一台宿主机上,vpn 创建的虚拟网卡宿主机也看得到吧
似乎 k8s 网络似乎只是用虚拟网卡和不同网络空间组了虚拟网络,路由和 nat 应该是由宿主机的网络栈提供的,所以操作宿主机路由表和 nat 就行吧 |
5
NipGeihou OP @sujin190 感谢,"vpn 创建的虚拟网卡宿主机也看得到吧"提示了我,才发现我把 node1 和 node2 的 ssh 连接名称对调了,连接到正确的宿主机后,确实能在 ip addr 看到那个 vpn 里的虚拟网卡 wg0 。
但我发现即便在 vpn 的宿主机 ping 本地电脑 ip 也无法 ping 通,而在 vpn pod 里是可以的 |
6
NipGeihou OP @maja 我有试过 ktctl ,但我没有把 k8s 暴露在公网,我还是需要通过 vpn 连到 k8s 集群所在网络才可以使用,并且他需要 kubeconfig ,但我目前的场景只需要实现互通就可以了。
|
7
sujin190 2022-11-05 17:15:36 +08:00 via Android
@NipGeihou 那估计 wg0 是在容器的网络空间创建的吧,宿主机看的时候是不是没 ip ,pod 里看有 ip ?但路由表配置逻辑应该是一样的吧,下一跳需要先到 pod 的 ip
|
8
NipGeihou OP @sujin190 又折腾了一天,发现宿主机的 wg0 是之前配置了 hostNetwork: true 出现的,后面改回 false 并没有自动删除,所以其实是不通的。
后面我又改成了 hostNetwork: true ,在宿主机下能够 ping 通本地电脑 ip ,但其他 node 添加了路由表,还是无法 ping 通本地电脑,vpn 网络变得十分的差,但感觉方向应该是这个方向。 因为还要做其他工作,就先不折腾这个,先用 vpn+KtConnect 将流量转发到本地 |
9
novolunt 2022-11-06 13:21:59 +08:00
你的网络使用的是 wg0 ,也就是原程,那就没办法转发到本地,除非你设定路由不让内网走远程
|