我们正在谷歌云上运行一个私有的Kubernetes集群。我们对Kubernetes知之甚少,因此正在努力了解如何解决这个问题。
一个特定的内部IP地址(10*.0.0(已被列入白名单,以允许该IP地址上的集群访问敏感的内部服务(访问MySQL实例(。这很好,但现在我们想从一个集群迁移到多个集群,但我们需要所有这些集群都能够通过这个白名单IP地址路由流量。集群和白名单IP地址共享同一VPC网络。
我们应该如何处理这个问题?我们考虑创建一个ClusterIP服务,但不允许指定内部IP地址。负载均衡器也不是我们所需要的,因为它们试图处理外部流量,而我们只对内部流量感兴趣。
由于NAT不允许您在同一子网中拥有输入和输出IP地址,GKE也不允许您为另一个节点池使用单独的子网,因此此任务的唯一解决方案是在具有specific internal IP address (10.*.0.0) on its network interface
的单独VM上安装SQL或TCP代理。
您的应用程序实例将连接到特定端口上的虚拟机,代理软件将启动从其自己的IP地址到MySQL实例的新连接。所有回复都将转发回请求的发起人。
请看下面使用Nginx实现TCP代理的示例(尽管该示例与MS SQL有关,但它应该也适用于MySQL,仅使用不同的端口:3306,并且您可能不需要UDP相关部分(:
- 使用Nginx反向代理MS SQL
stream {
upstream dbtcp {
server db1:1433;
}
upstream dbudp {
server db1:1434;
}
server {
listen 1433;
proxy_pass dbtcp;
proxy_connect_timeout 1s; # detect failure quickly
}
server {
listen 1434 udp;
proxy_pass dbudp;
proxy_connect_timeout 1s; # detect failure quickly
}
}
更复杂但也更灵活且功能丰富的方法是使用SQL感知代理,如ProxySQL它是一个根据GPLv3许可证提供的开源项目。
- ProxySQL Github链接