0%

将工作网络与Kubernetes内网直联访问 (不完美方案)

因为开发需要,我们经常要访问Kubernetes内网的某个svc / pod等,特别是数据库之类的。但是,因为Kubernetes是一个包起来的内部网络,仅只能在Node上去看,这样很不方便。

于是乎我想解决这个问题,想到了路由,想到了VPN,最不愿意得到的实现是SNAT。结果,前两者都挂了,实现不了,因为对Kubernetes了解不足,很多操作报错又无法解决。仅只有一个SNAT实现了,我去!

算了,还是暂时接受,记下来,方便以后使用。

步骤

  1. 在内网路由上设置静态路由规则,将10.0.0.0/8网络路由到Kubernetes其中一个Node,比方说:192.168.55.207。

  2. 在192.168.55.207上,增加一条iptables规则:

    1
    $ iptables -t nat -I POSTROUTING  -d 10.0.0.0/8 -j MASQUERADE

大功告成

如果不想每次 192.168.55.207重启后都做这个动作,可以将上面的命令做成一个systemd 的服务:/usr/lib/systemd/system/init-network.service

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Init network
After=network.target

[Service]
Type=forking
ExecStart=iptables -t nat -I POSTROUTING -d 10.0.0.0/8 -j MASQUERADE
User=root

[Install]
WantedBy=multi-user.target

安装服务:

1
2
$ systemctl enable init-network
$ systemctl start init-network