14

我正在尝试在 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 个公共子网的路由表:目标为 172.30.0.0/16 和目标的路由 - 添加了步骤 #3 中的对等连接。
  5. 更新了 RDS 的路由表:添加了目标为 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

为了从 pod 访问 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 主机地址。

此修复不起作用:(

4

2 回答 2

11

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

于 2018-12-04T22:28:41.613 回答
0

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

它是关于使用没有选择器的服务。还要查看ExternalName Services。

于 2018-12-01T17:37:57.560 回答