Kubernetes elasticserach健康检查失败-但仅在某些容器中

时间:2020-05-12 14:32:04

标签: docker elasticsearch kubernetes vagrant virtualbox

我遇到了一个非常奇怪的网络问题,试图让Elasticsearch在本地Kubernetes集群上工作,而我完全为可能导致该问题的原因感到困惑。在这一点上,我不认为这是一个Elasticsearch问题,我认为主机中发生了一些奇怪的事情,但是我一生都无法弄清楚它是什么。

TLDR版本:“ curl -X GET http://127.0.0.1:9200”可在某些容器内部工作,而在其他容器中则不能工作。

详细信息如下:

我有一个4节点的Kubernetes集群,可以在两台不同的机器上进行测试。

  • 两个主机都具有相同的操作系统(OpenSuse Leap 15.1)
  • 它们都具有相同版本的VirtualBox和Vagrant。
  • 它们都具有一个4节点的Kubernetes集群,该集群是使用相同的Vagrant基本框(bento / centos-7)的相同版本从相同的Vagrantfile创建的。
  • 由于Vagrant框相同,所以我的两个环境在VM中都将具有相同版本的Docker。
  • 我已使用相同的Helm图表将Elasticsearch安装到每个集群,并且它们都使用相同的Elasticsearch Docker映像。

但是从那里开始,当我执行以下操作时,我遇到了一种环境问题:

  1. 我运行kubectl get pods -A -o wide来找出elasticsearch master在哪里运行。
  2. 我向该节点运行vagrant ssh
  3. 以root身份运行docker ps来查找运行elasticsearch的容器的ID。
  4. 以root身份运行docker exec -u root -it container_name /bin/bash,以在容器中获取外壳。
  5. 我运行curl -X GET http://127.0.0.1:9200/_cluster/health,这是Kubernetes用来进行健康检查的东西。在一个环境中,我得到了JSON。另一方面,我收到“连接被拒绝”

我不知道为什么在相同类型的虚拟机上运行的同一docker映像会在不同的主机上产生不同的结果。

有人可以阐明这种情况吗?

0 个答案:

没有答案