【发布时间】:2019-05-12 21:05:19
【问题描述】:
背景:我在一个 AWS 账户中设置了一个 kubernetes 集群,该集群需要访问另一个账户中的 RDS MySQL 实例中的数据,但我似乎无法正确设置以允许流量。
到目前为止我所尝试的:
- 在两个 VPC 之间建立对等连接。他们在同一个区域,us-east-1。
- 在每个帐户中创建路由表条目,以将相应子网上的流量指向对等连接。
- 在 RDS VPC 中创建了一个安全组,以允许来自 kubernetes 子网的流量访问 MySql。
- 确保在两个 VPC 上都启用了 DNS 解析。
Kubernetes VPC 详细信息(请求者)
这包含容纳我的 kubernetes 集群的 3 个 EC2(看起来每个都有自己的子网)。我使用 EKS 进行设置。
我设置的路由表规则关联了 3 个子网,并将 RDS VPC CIDR 块指向对等连接。
RDS VPC 详细信息(接受者)
此 VPC 包含 mysql RDS 实例以及其他一些资源。 RDS 实例分配了相当多的 VPC 安全组,用于从我们的办公室 IP 等访问。它的 Public Accessibility 设置为 true。
我重复了路由表设置(反向)并指向 K8s VPC 子网/对等连接。
测试
为了测试连接,我尝试了 2 种不同的方法。需要访问mysql的应用程序是用node写的,所以我只写了一个测试连接器和示例查询,它超时了。
我还从 kubernetes 集群中运行的 pod 中的终端尝试了 netcat。
nc -v {{myclustername}}.us-east-1.rds.amazonaws.com 3306
这也超时。它似乎正在尝试访问正确的 mysql 实例 IP,所以我不确定这是否意味着我的路由规则在 k8s vpc 端正常工作。
DNS fwd/rev mismatch: ec2-XXX.compute-1.amazonaws.com != ip-{{IP OF MY MYSQL}}.ec2.internal
我不确定接下来要采取什么步骤。任何方向将不胜感激。
旁注:我已经阅读了这个Kubernetes container connection to RDS instance in separate VPC 我想我明白那里发生了什么。我的 CIDR 块与默认的 K8s ips (10.0...) 不冲突,所以我的问题似乎有所不同。
【问题讨论】:
-
要检查的几件事:RDS DNS 名称是否解析为公共 IP(是 DB 连接遍历 Internet,而不是对等连接)?你检查过网络 ACL 吗?
-
RDS DNS 解析为我期望的子网中实例的私有 IP,所以我认为至少路由表工作正常,这意味着我正在使用对等连接?我不太熟悉的ACL。两个 VPC 似乎都有允许网络 ACL 部分中的所有流量的规则。 110 ALL 交通 ALL ALL 0.0.0.0/0 ALLOW
-
那么您是否检查过它是否真的解析为私有 IP?您是否也尝试过从常规 EC2 实例访问数据库?
-
是的,我确认它解析为私有 IP。我没有尝试从常规 EC2 连接,这是个好主意。可能与kubernetes有关。我会设置一个并尝试一下。谢谢。
-
另外检查一下,可能是相关的,因为你有一个对等连接:docs.aws.amazon.com/eks/latest/userguide/external-snat.html
标签: amazon-web-services kubernetes vpc