繁体   English   中英

无法从在 AWS ECS 中运行的 springboot 应用程序访问在 EC2 上运行的 elasticsearch

[英]Can't access elasticsearch running on EC2 from a springboot application running in AWS ECS

我在运行 ubuntu 的 AWS EC2 实例上安装了弹性搜索(版本 8.2.3)和 Kibana。 所以弹性搜索运行在 9200 端口,而 Kibana 运行在 5601 端口。

为了保护我的 EC2 实例访问,我在其安全组中添加了以下入站规则。

类型 协议 端口范围 资源
自定义 TCP TCP 5601 我的 IP 地址 cidr
SSH TCP 22 我的 IP 地址 cidr
自定义 TCP TCP 9200 我的 IP 地址 cidr
自定义 TCP TCP 9200 ECS 服务的安全组

因此,我可以从我机器上运行的浏览器访问弹性搜索服务器和 Kibana 仪表板。

现在我创建了一个 spring-boot 应用程序来与弹性搜索交互。 当我使用 Intellij 在本地启动我的应用程序时,我能够创建索引或从索引中获取文档。

但是在创建我的应用程序的 docker 映像,然后将该应用程序作为 AWS 上的 ECS 服务启动后,我总是收到connection timeout异常。 为了解决这个问题,我尝试通过打开访问规则并提供对 EC2 实例上所有传入流量的访问来对其进行测试。

这意味着我在入站规则中添加了一个条目。 |类型 | 协议 | 端口范围 | 来源 | |---------|----------|------------|-------------- ----| |全部流量|全部|全部|0.0.0.0/0|

一切正常,我在 ECS 上运行的服务能够与弹性搜索通信。 但强烈不建议这样做,我绝对不想以这种方式进行。

有人可以指导我应该将哪些入站规则添加到 EC2 安全组,以便我可以删除所有流量规则吗?

我的目标是让 Spring Boot 应用程序与在 EC2 实例中运行的弹性搜索进行通信。

仅供参考,Spring Boot 应用程序使用 AWS ECS 服务和 Fargate 运行。 此服务在私有子网中运行。 这就是我将 ECS 服务安全组添加到 EC2 实例安全组的原因,以便允许 ECS 服务与弹性搜索通信。 但它没有用。

谢谢

您的应用程序正在尝试使用 EC2 实例的公有 IP 地址或公有 DNS 名称连接到 Elasticsearch。 这意味着来自您的 ECS 服务的网络请求正在退出 VPC,进入 Internet,然后返回 VPC。 发生这种情况时,它将与 ECS 服务的安全组 ID 取消关联,因此您允许来自 ECS 服务的安全组 ID 的流量的安全组规则不再适用。

要解决此问题,请在从 ECS 连接到 Elasticsearch 时更改您的应用程序以使用 ECS 实例的私有 IP 或私有 DNS 名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM