Kubernetes 容器连接到单独 VPC 中的 RDS 实例

Kubernetes container connection to RDS instance in separate VPC

我在自己的 VPC 内的 Amazon EC2 中有一个 Kubernetes 集群 运行,我正在尝试让 Dockerized 服务连接到 RDS 数据库(位于不同的 VPC 中)。我已经弄清楚了对等和路由 table 条目,所以我可以从 minion 机器上执行此操作:

ubuntu@minion1:~$ psql -h <rds-instance-name>
Password:

一切正常。问题是,当我尝试从 Kubernetes 管理的容器内部建立连接时,出现超时:

ubuntu@pod-1234:~$ psql -h <rds-instance-name>
…

为了让 minion 连接,我配置了对等连接,设置了来自 Kubernetes VPC 的路由 tables,以便 10.0.0.0/16(RDS VPC 的 CIDR)映射到对等连接,并更新了 RDS 实例的安全组以允许从地址范围 172.20.0.0/16(Kubernetes VPC 的 CIDR)到端口 5432 的流量。

您是否也修改了 source/destination 检查?

由于您的实例将发送和接收来自子网分配的 IP 以外的 IP 的流量,因此您需要禁用 source/destination 检查。

看图: https://coreos.com/assets/images/media/aws-src-dst-check.png

在 Kelsey Hightower 的帮助下,我解决了这个问题。事实证明这是一个 Docker 路由问题。我已经在 blog post 中写下了详细信息,但最重要的是要像这样更改 minions 的路由 table:

$ sudo iptables -t nat -I POSTROUTING -d <RDS-IP-ADDRESS>/32 -o eth0 -j MASQUERADE