k8s网络与办公网络互通

 kubernetes 的网络模型中,基于官方默认的 CNI 网络插件 Flannel,这种 Overlay Network(覆盖网络)可以轻松的实现 pod 间网络的互通。当我们把基于 spring cloud 的微服务迁移到 k8s 中后,无须任何改动,微服务 pod 可以通过 Eureka 注册后可以互相轻松访问。

但是实际使用中,我们出现了以下需求:

  • 1.办公室网络 和 k8s pod 网络不通。开发在电脑完成某个微服务模块开发后,希望本地启动后,能注册到 k8s 中开发环境的服务中心进行调试,而不是本地起一堆依赖的服务。
  • 2.办公室网络 和 k8s svc 网络不通。在 k8s 中运行的 mysql、redis 等,无法通过 ingress 7层暴露,电脑无法通过客户端工具直接访问;如果我们通过 service 的 NodePort 模式,会导致维护量工作量巨大。
  • 网络互通配置

  • k8s 集群中新加一台配置不高(2核3G)的 node 节点(node-3)专门做路由转发,连接办公室网络和 k8s 集群 pod、svc
  •  IP 地址 10.16.1.38
  • 内网DNS IP 地址 10.129.83.159
  • pod网段 172.20.0.0/16,svc网段 10.68.0.0/16
  • 办公网段 10.129.0.0/24
  • 给 node-3节点打上污点标签(taints),不让 k8s 调度 pod 来占用资源:
  • kubectl taint nodes node-3 forward=node-3:NoSchedule
  • node-3节点,做snat:
  • # 开启转发 # vim /etc/sysctl.d/k8s.conf net.ipv4.ip_forward = 1 # sysctl -p # 来自办公室访问pod、service snat iptables -t nat -A POSTROUTING -s 10.129.0.0/24 -d 172.20.0.0/16 -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.129.0.0/24 -d 10.68.0.0/16 -j MASQUERADE
  • 在办公室的出口路由器上,设置静态路由,将 k8s pod 和 service 的网段,路由到 node-3节点上
  • ip route 172.20.0.0 255.255.0.0 10.129.83.159 ip route 10.68.0.0 255.255.0.0 10.129.83.159
posted @ 2023-01-08 14:41  繁星下的晴空  阅读(313)  评论(0编辑  收藏  举报