如何为多个服务分配静态 IP,以便它们可以查询 postgres 数据库?

How to assign a static IP to mutliple services so they can query a postgres db?

我有多个跨节点的服务运行。

我希望能够从这些服务的 pods 查询一个 postgres 数据库 - 这个 postgres 数据库只允许来自白名单 IP 的连接 - 我需要与 postgres 的管理员共享一个静态 IP db 才能连接到它。

如何确保无论我的 pod 在哪个节点上,我都可以使用预定义的静态 IP 连接到 postgres 数据库?

我当前的设置是:

NGINX INGRESS(静态 IP)--> 基于主机的特定服务路由。

123.abc.com --> Service A --> Pod A --> Node A --> External IP A

456.abc.com --> Service B --> Pod B --> Node B --> External IP B

Pods 这些服务获取它们所在节点的外部 IP。服务类型为 NodePort。

__ 可能的解决方案:

我现在正在尝试设置一个公共服务 - Service Postgres - 它将查询 Postgres 数据库。所有其他服务每次想要访问 postgres 时都会明确查询 postgres 服务。

我为服务分配了一个外部 IP。但是 pod 从节点的 IP 查询。负载均衡器中的外部 IP 似乎是用于传入请求的?我们如何为传出请求分配固定 IP?

Outgoing IP for pods in K8s - Question on Whosebug

该问题的答案令人满意。

  1. 创建一个与 PostgreSQL 对话的辅助服务。使用节点选择器将其安排在新节点池中的特定节点上。使用上述 link 中提到的步骤为该节点分配一个静态 IP。 (尚未测试此步骤)(KubeIP 似乎是一个很好的解决方案)

  2. 在私有集群的 GKE 中使用 NAT 网关。 NAT Gateway GKE

第一个选项似乎更容易实施,第二个选项更通用。