我有一个前端应用程序在 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
上运行。工作节点安全组还允许所有出站流量。
我认为这可能是端口转发问题,但我对连接问题了解不多。任何帮助表示赞赏。
答案 0 :(得分:0)
您忘了提及您是如何配置 kubernetes 集群的。
kubeadm
或类似方法自行设置集群,并且使用了一些 CNI 插件,例如 calico、flannel 或 weave。这会产生问题,因为 POD IP 地址未在您的 VPC 中路由。它们与 EC2 实例地址完全不同。在这种情况下,您需要做的是设置地址转换规则,将 pod 的源地址转换为 EC2 实例的 IP 地址。在这种情况下,请遵循本指南:https://kubernetes.io/docs/tasks/administer-cluster/ip-masq-agent/