【问题标题】:Cannot connect to Elasticsearch EC2 port 9200 using public ip无法使用公共 ip 连接到 Elasticsearch EC2 端口 9200
【发布时间】:2020-05-22 02:41:37
【问题描述】:

我在尝试通过 EC2 实例公共 ip (即curl [PUBLIC_IP]:9200)从本地 linux 机器上连接到 EC2 实例上的 Elasticsearch (ES) 时遇到问题

我按照本指南中的步骤操作:https://github.com/miztiik/elk-stack/tree/master/ElasticSearch

我的ES版本是6.8.9

以下是有效的和无效的:

  • 在 ES EC2 实例上: curl localhost:9200 有效
  • 在具有相同 VPC 的另一个实例上: curl [PUBLIC_IP]:9200 有效
  • 在我的本地 linux 机器上: curl [PUBLIC_IP]:9200 不起作用,但 telnet [PUBLIC_IP] 9200 起作用,即它连接并给了我转义字符 '^]'

我的 /etc/elasticsearch/elasticsearch.yml 配置有以下内容:

http.enabled: true
http.port: 9200
network.host: 0.0.0.0
http.cors.allow-origin: "*"
http.cors.enabled: true

只有一个(新)安全组附加到 EC2 实例,它具有以下入站规则:

我还确认 EC2 实例位于公共子网中,即连接到互联网网关。

感谢您的帮助。

更新

我还在实例上安装了 Apache httpd 并重新检查了所有内容。这是目前的情况:

  • 我可以从外部 ping、telnet 和连接到 Web 服务器 (:80)。
  • 我无法从外部连接到 Elasticsearch (:9200) 或 Kibana (:5601)。然而,所有这些我都可以在另一个实例的 VPC 中完成。

【问题讨论】:

    标签: elasticsearch amazon-ec2


    【解决方案1】:

    这听起来与防火墙有关。 检查 ECE2 安全组并修改默认 Sec 组或创建新组并将其与您的实例相关联。 对于测试,将您的入站修改为您的端口:

    0.0.0.0/0 IPv4
    

    并设置网络主机如下

    network.host: _ec2 # if using the plugin
    

    否则

    network.host: "{elastic_ip}”
    

    如果你的 ece2 实例没有公共 dns,你将不得不编辑你的 /etc/hosts 文件并添加你的实例的 IP 地址

    network.bind_host

    这指定节点应绑定到哪个网络接口以侦听传入请求。一个节点可以绑定到多个接口,例如两个网卡,或一个站点本地地址和一个本地地址。默认为 network.host。

    network.publish_host 发布主机是节点向集群中的其他节点通告的单一接口,以便这些节点可以连接到它。目前一个Elasticsearch节点可能绑定多个

    https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html

    https://discuss.elastic.co/t/elasticsearch-only-accessible-from-localhost/65782/3

    https://www.elastic.co/blog/running-elasticsearch-on-aws

    https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#describing-security-group

    How do I enable remote access/request in Elasticsearch 2.0?

    【讨论】:

    • 我不是已经这样做了吗?如果您单击我帖子中的“入站规则”超链接,它会显示我与安全组关联的入站规则。我有“自定义 TCP TCP 9200 0.0.0.0/0”。我的声望不够高,无法将该图片内嵌到我的帖子中。
    • 嗯,还以为他们有点不同。你确定这个安全组与实例相关联吗?是默认的吗?
    • 我在创建 ES EC2 实例时将一个新的安全组关联到该实例。实例关联的只有一个安全组,这些是我设置的入站规则。我在哪里设置 "network.host: _ec2" ?在我的 elasticsearch.yml 文件中?如果我这样做,elasticsearch 将无法重新启动。我在我的 ES 日志文件中得到“java.net.UnknownHostException: _ec2: Name or service not known”。
    • 正确,在 elasticsearch.yml 文件中
    • 好的,我安装了discovery-ec2插件。我还必须将 network.host 设置为 _ec2 _(即两边的下划线),而不是 _ec2。重启 EC2,但仍然无法通过 curl [PUBLIC_IP]:9200 on linux box 连接。
    【解决方案2】:

    我在 AWS 上遇到了同样的问题。尝试使用公共 DNS 或私有 IP 代替公共 IP 来连接同一 VPC 中的另一个 ec2 实例。

    【讨论】:

    • 在我的帖子中,我提到了“在与 ES EC2 实例相同的 VPC 中的另一个 EC2 实例上:curl [PUBLIC_IP]:9200 有效”。但我真的很想让它在我本地的 linux 机器上工作
    猜你喜欢
    • 2015-10-19
    • 2016-10-18
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 2016-03-10
    • 1970-01-01
    相关资源
    最近更新 更多