Kubernetes:无法从 EKS pod 访问 RDS Postgres

Kubernetes: Have no access from EKS pod to RDS Postgres

我正在尝试在 AWS 上设置 kubernetes。为此,我根据官方 AWS 教程创建了一个具有 3 个节点 (t2.small) 的 EKS 集群。然后我想 运行 一个带有一些与 Postgres(不同 VPC 中的 RDS)通信的应用程序的 pod。

但不幸的是,应用程序没有连接到数据库。

我有:

  1. EKS 集群有自己的 VPC (CIDR: 192.168.0.0/16)
  2. RDS (Postgres) 有自己的 VPC (CIDR: 172.30.0.0/16)
  3. 从 RDS VPC 发起到 EKS VPC 的对等连接
  4. EKS 集群的 3 个 public 子网的路由 table 已更新:目的地为 172.30.0.0/16 和目标的路由 — 添加了步骤 #3 中的对等连接。
  5. RDS 的路由 table 已更新:目标为 192.168.0.0/16 和目标的路由 — 添加了步骤 #3 中的对等连接。
  6. 更新RDS安全组,新增入站规则:允许所有来自192.168.0.0/16的流量

完成所有这些步骤后,我执行 kubectl 命令:

kubectl exec -it my-pod-app-6vkgm nslookup rds-vpc.unique_id.us-east-1.rds.amazonaws.com
nslookup: can't resolve '(null)': Name does not resolve

Name:      rds-vpc.unique_id.us-east-1.rds.amazonaws.com
Address 1: 52.0.109.113 ec2-52-0-109-113.compute-1.amazonaws.com

然后我连接到 3 个节点之一并执行命令:

getent hosts rds-vpc.unique_id.us-east-1.rds.amazonaws.com
52.0.109.113    ec2-52-0-109-113.compute-1.amazonaws.com rds-vpc.unique_id.us-east-1.rds.amazonaws.com

为了从 pods 访问 RDS,我在 EKS 设置中错过了什么?

更新:

我尝试通过 Service 解决问题:

apiVersion: v1
kind: Service
metadata:
  name: postgres-service
spec:
  type: ExternalName
  externalName: rds-vpc.unique_id.us-east-1.rds.amazonaws.com

所以我在 EKS 中创建了这个服务,然后尝试将 postgres-service 引用为 DB URL 而不是直接的 RDS 主机地址。

此修复无效:(

我提供的答案 here 实际上可能也适用于您的情况。

这是关于使用 Services without selectors. Look also into ExternalName 服务。

您是否尝试在对等连接中启用 "dns propagation"?看起来您没有获得内部可路由的 DNS。您可以通过进入对等连接设置并选中 dns 传播框来启用它。我通常会对我控制的所有对等连接执行此操作。