DNAT实现开发环境配置统一

165 阅读1分钟

环境介绍

  • 我部门开发环境后端服务部署在云环境搭建的k8s集群。
  • k8s所有节点在同一网段,能互通。
  • 微服务采用nacos配置中心。
  • 为集中管理,开发环境与本地开发采用统一nacos配置文件。

矛盾点

开发环境与云环境只能通过公网IP通信,因此nacos配置文件中关于redis或数据库连接的配置都是公网IP。但有些k8s节点无公网IP且无法访问外网,这些节点上pod启动时会因无法连接公网IP上的中间件而报错启动失败。

可能的解决方案

  1. 中间件连接URL均设置为自定义的域名,本地和pod均配置hosts解析。 所有人的pc都要配置hosts,如果配置变更所有人的PC都要跟着变。且多次变更后会引起不一致,会引起 不必要的重复运维工作。
  2. 无法连接外网的k8s节点通过能访问外网的节点实现连接公网 因云环境特有设置,该方法实现较复杂,且尝试后未成功。
  3. 在无法连接外网的k8s节点上设置DNAT

DNAT方案

最后选择DNAT方案,pod如需访问其他公网资源,需在k8s节点设置Tains和pod设置Tolerations,将该pod始终调度到可访问外网的节点。 在无法连接外网node还行DNAT

sudo iptables -t nat -A PREROUTING -d xxx.xx.x.xx -j DNAT --to-destination yyy.yy.y.yy

这样设置后所有访问xxx.xx.x.xx的流量就会被转发到yyy.yy.y.yy。 查看已经设置的DNAT

sudo iptables -t nat -L PREROUTING -n -v