学习和使用 k8s 一段时间了,以下是学习过程中开发的两个小项目,希望能够得到大家的批评和指正,顺便点个 🌟 star ! 😁😁😁
出发点是,在云原生转型过程中,部分应用实例部署在常规虚拟机(192.168.0.0/16)中,部分应用实例部署在 k8s 中(10.233.0.0/16)中,正常情况下,常规虚拟机中的应用无法访问 k8s 中的应用实例。因此开发了这个小工具以同步 calico 路由信息,使常规虚拟机可以访问 pod ip, 使云原生转型更加平滑。
相同网络下,k8s 集群外的节点同步 calico 路由信息,以直接访问 pod ip
bin:
sudo ./calico-route-sync --kubeconfig=/home/root/.kube/config
docker:
docker run --rm -it --network=host --cap-add NET_ADMIN -v ~/.kube/config:/root/config q946666800/calico-route-sync:0.1 --kubeconfig=/root/config
使用场景比较有限,仅支持 calico ,且 vm-01 与 k8s 节点处于同一网络。
优点是简单、高效、稳定(类似 Calico 节点)。流量直接从 vm-01 流向 k8s 节点,无需经过其他路由器或隧道。
如果您希望 vm-01 可以处于不同的网络中,可以使用项目k8s-tun。
k8s 集群外的节点访问 pod ip, service ip
服务端
kubectl apply -f https://raw.githubusercontent.com/yzxiu/k8s-tun/master/deploy.yaml
客户端
Linux & Mac
# download client
wget https://github.com/yzxiu/k8s-tun/releases/download/0.86-3/client-darwin-amd64-086-3
chmod +x client-linux-amd64-086-3
# start client
sudo ./client-linux-amd64-086-3 -s <k8s-node-ip>:30011
Windows
download [client-windows-amd64-086-3.exe]( https://github.com/yzxiu/k8s-tun/releases/download/0.86-3/client-windows-amd64-086-3.exe)
install the attached tap-windows-9.24.2-I601-Win10 driver
right click `client-windows-amd64-086-3.exe` and run as administrator
优点:理论上支持所有 cni 插件,vm-01 可以与 k8s 集群处于不同网络,使用比较灵活。客户端无需配置 kubeconfig
缺点:流量通过隧道传输(类似于 openvpn),效率较低。
隧道实现参考了 https://github.com/net-byte/vtun
1
ysicing 2023-08-07 17:07:13 +08:00
为啥不是直接打通 pod/svc cidr 呢?
|
2
yimiaoxiehou 2023-08-07 17:56:47 +08:00 via Android
挺好的,我都说 wireguard 完事
|
3
kknd22 2023-08-07 23:10:54 +08:00
限定 pod 访问外部的 IP 用什么方法呢?
|
4
yuyu01 OP @ysicing 项目一模拟 calico node ,将各个不同的小网段路由到不同的节点,有多少个 blockaffinity 就有多少条路由。
项目二是通过隧道,就是直接 打通 pod/svc cidr ,一般就只需要加两条路由。 |
5
yuyu01 OP @kknd22
[Network Policies]( https://kubernetes.io/docs/concepts/services-networking/network-policies/) 应该可以 |
6
ln33653 2023-08-08 10:02:39 +08:00
挺好的,简单明了,集群外到集群内的方式比 kt-connect 简单不少,可以更进一步搞个拦截集群内流量到本地的功能,就完美了
|
7
latteczy 2023-08-10 09:43:19 +08:00
calico 是用的 ipip 吗? calico-route-sync 这个项目中,在 vm 中添加的路由是走的哪张网卡出去的?
|
8
yuyu01 OP @latteczy calico-route-sync 这个项目只能在通个网络下使用,走的是对应网络的网卡。
``` Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.4.2 0.0.0.0 UG 600 0 0 wlp4s0 10.233.74.0 192.168.4.32 255.255.255.192 UG 0 0 0 wlp4s0 10.233.100.192 192.168.4.33 255.255.255.192 UG 0 0 0 wlp4s0 10.233.114.128 192.168.4.34 255.255.255.192 UG 0 0 0 wlp4s0 10.233.122.192 192.168.4.31 255.255.255.192 UG 0 0 0 wlp4s0 192.168.4.0 0.0.0.0 255.255.255.0 U 600 0 0 wlp4s0 ``` 这个项目曾经做过兼容 calico 的 ipip 模式,会复杂很多,还需要给每个外部节点分配一个虚拟 ip ,在 k8s 集群部署一个 daemonSet ,用来处理 ipip 流量。感觉复杂了许多,不太适合生产使用。后面就去掉了。 |
9
yuyu01 OP 上面说错了,k8s 集群部署一个 daemonSet ,应该是用来维护流量返回外部节点的 ipip 路由,
|
10
latteczy 2023-08-10 14:14:35 +08:00
> 这个项目只能在通个网络下使用
啥叫`通个网络`?是指不需要封包的二层网络吧?那这个限制就太大了,基本没什么用处了。 |