Docker 发布端口后,Swarm 中的服务无法连接到 AWS RDS
Docker Service in Swarm cannot connect to AWS RDS when a port is published
我工作的公司最近决定使用 EC2 实例在 AWS 上部署一个带有 docker swarm 的新应用程序。我们建立了一个由三个 EC2 实例组成的集群作为节点(一个管理器,两个工作人员),我们使用堆栈来部署服务。
问题是其中一项服务(django 应用程序)在尝试连接到在同一 VPC 中的 RDS 上运行的 postgres 数据库时超时。但仅当服务发布端口时。
不发布任何端口的服务可以很好地连接到数据库。
RDS 端点被解析为正确的 IP,因此它不应该是 DNS 问题并且容器可以连接到互联网。这些服务还能够在不同的节点上相互通信。
数据库的安全组定义也不应该有问题,因为 EC2 实例本身可以连接到数据库。
此外,服务可以连接到 VPC 内其他实例上 运行 的事物。
它似乎与 swarm(和覆盖网络)有关,因为 运行 具有桥接网络的普通容器内的应用程序不会引起任何问题。
堆栈似乎不是问题,因为即使手动创建服务,问题仍然存在。
我们在 Ubuntu 18.04.4 LTS 和 docker-compose 版本 3.
上使用 Docker CE 版本 19.03.8
当您配置 swarm 子网与 VPC 中的子网冲突时,问题就来了。您必须将 swarm 子网更改为不同的 CIDR。
我工作的公司最近决定使用 EC2 实例在 AWS 上部署一个带有 docker swarm 的新应用程序。我们建立了一个由三个 EC2 实例组成的集群作为节点(一个管理器,两个工作人员),我们使用堆栈来部署服务。
问题是其中一项服务(django 应用程序)在尝试连接到在同一 VPC 中的 RDS 上运行的 postgres 数据库时超时。但仅当服务发布端口时。
不发布任何端口的服务可以很好地连接到数据库。
RDS 端点被解析为正确的 IP,因此它不应该是 DNS 问题并且容器可以连接到互联网。这些服务还能够在不同的节点上相互通信。
数据库的安全组定义也不应该有问题,因为 EC2 实例本身可以连接到数据库。
此外,服务可以连接到 VPC 内其他实例上 运行 的事物。
它似乎与 swarm(和覆盖网络)有关,因为 运行 具有桥接网络的普通容器内的应用程序不会引起任何问题。
堆栈似乎不是问题,因为即使手动创建服务,问题仍然存在。
我们在 Ubuntu 18.04.4 LTS 和 docker-compose 版本 3.
当您配置 swarm 子网与 VPC 中的子网冲突时,问题就来了。您必须将 swarm 子网更改为不同的 CIDR。