无法将 Kubernetes pod 连接到 RDS 数据库

时间:2021-04-19 13:14:58

标签: amazon-web-services kubernetes amazon-rds

我有一个前端应用程序在 AWS 的 Kubernetes 集群中运行。它与在同一 VPC 中运行的 Postgres RDS 实例通信。 RDS 和 k8s 工作节点都连接到相同的私有子网。

RDS 安全组允许从 Kubernetes 节点(EC2 实例)到数据库的所有访问。来自 nodes 的连接很好,因为运行 telnet <rds-endpoint> 5432 返回 Connected to <rds-endpoint>.

但是当应用程序部署到 pods 时,它无法访问 RDS 实例。 Pod 在节点私有 IP 地址 <private-ip-address>:8080 上运行。工作节点安全组还允许所有出站流量。

我认为这可能是端口转发问题,但我对连接问题了解不多。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您忘了提及您是如何配置 kubernetes 集群的。

  1. 无论您使用 EKS 服务。在这种情况下,pod IP 地址实际上是您的 EC2 实例(工作程序节点)的辅助 IP 地址。至少,如果您使用默认的 AWS CNI 插件,那么在这种情况下,真正需要的只是在附加到 RDS 的安全组中允许 EC2 实例 ID。
  2. 您使用 kubeadm 或类似方法自行设置集群,并且使用了一些 CNI 插件,例如 calico、flannel 或 weave。这会产生问题,因为 POD IP 地址未在您的 VPC 中路由。它们与 EC2 实例地址完全不同。在这种情况下,您需要做的是设置地址转换规则,将 pod 的源地址转换为 EC2 实例的 IP 地址。在这种情况下,请遵循本指南:https://kubernetes.io/docs/tasks/administer-cluster/ip-masq-agent/