【问题标题】:Running GKE pods on a specific internal IP在特定的内部 IP 上运行 GKE pod
【发布时间】:2021-03-25 11:48:00
【问题描述】:

我们正在 Google Cloud 上运行一个私有 Kubernetes 集群。我们对 Kubernetes 的了解很少,因此正在努力了解如何解决这个问题。

一个特定的内部 IP 地址 (10.*.0.0) 已被列入白名单,以允许该 IP 地址上的集群访问敏感的内部服务(访问 MySQL 实例)。这很好用,但现在我们想从一个集群迁移到多个集群,但我们需要所有这些集群能够通过这个列入白名单的 IP 地址路由流量。集群和列入白名单的 IP 地址共享同一个 VPC 网络。

我们应该如何处理这个问题?我们研究过创建一个 ClusterIP 服务,但它不允许指定内部 IP 地址。负载均衡器也不是我们需要的,因为它们希望处理外部流量,而我们只对内部流量感兴趣。

【问题讨论】:

  • 你看过Internal load balancer方向吗?
  • 有趣,让我阅读该文档并进行调查。感谢@Vitalii 的指点!
  • @Vitalii 我不确定内部负载均衡器是否适合我的用例。我的 VPC 网络中有一个 IP 地址被列入白名单以访问 MySQL 实例,但我希望多个集群能够通过这个列入白名单的 IP 地址路由流量。内部负载均衡器的概念看起来是针对入口的,即多个外部请求被定向到一个 IP 地址,然后分发到多个不同的内部 IP 地址。有什么想法吗?
  • 是的,你就在这里。我的解决方案无济于事。您已解决或仍在进行中?
  • @Vit 在我们这边仍然是一个悬而未决的问题,所以欢迎任何进一步的帮助。

标签: kubernetes google-kubernetes-engine kubernetes-ingress


【解决方案1】:

由于 NAT 不允许您在同一子网中输入和输出 IP 地址,并且 GKE 不允许您为另一个节点池使用单独的子网,因此此任务的唯一解决方案是 SQL 或 TCP代理安装在具有 specific internal IP address (10.*.0.0) on its network interface 的单独 VM 上。

您的应用程序实例将在特定端口上连接到该虚拟机,并且代理软件会启动从其自己的 IP 地址到您的 MySQL 实例的新连接。所有响应都将转发回请求的发起者。

请看下面使用 Nginx 实现 TCP 代理的示例(尽管该示例与 MS SQL 相关,但它应该也适用于 MySQL 以及不同的端口:3306,并且您可能不需要与 UDP 相关的部分):

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 这是一个开源项目,在 GPL v3 许可下提供。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 2019-10-18
    • 2022-01-18
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多