【问题标题】:Communication between consul on local VM and consul in Kubernetes本地 VM 上的 consul 和 Kubernetes 中的 consul 之间的通信
【发布时间】:2020-12-04 17:06:18
【问题描述】:

我有一个包含 2 个主节点和 3 个工作节点的 Kubernetes 集群。我已经使用 HELM 安装了运行 3 个 consul-servers 和 5 个 consul-clients 的 consul setup。

以下是 consul 服务器 pod 和 consul 客户端 pod 在 Kubernetes 节点上的放置方式:

[root@k8masterg2m1 autoinstall]# kubectl get po -o wide | grep consul
consul-consul-4lxtr 1/1 Running 0 103m 192.168.139.139 k8masterg2m1
consul-consul-6wv9w 1/1 Running 0 103m 192.168.118.215 k8workerg2w3
consul-consul-pc562 1/1 Running 0 103m 192.168.108.162 k8workerg2w2
consul-consul-server-0 1/1 Running 0 107m 192.168.118.214 k8workerg2w3
consul-consul-server-1 1/1 Running 0 9m15s 192.168.227.91 k8workerg2w1
consul-consul-server-2 1/1 Running 0 107m 192.168.108.161 k8workerg2w2
consul-consul-tg4kz 1/1 Running 0 103m 192.168.139.72 k8masterg2m2
consul-consul-tj7h5 1/1 Running 0 103m 192.168.227.90 k8workerg2w1

另一方面,我在本地 VM 上安装了 consul 客户端,该 VM 与 Kubernetes 节点位于同一网络上。

从运行在 Kubernetes 中的 consul 服务器 pod,我使用以下命令加入本地 VM(10.0.20.102)。

/ # consul join 10.0.20.102
Successfully joined cluster by contacting 1 nodes.

我可以在 Kubernetes 的 VM 和 consul pod 中看到以下输出:

/ # consul members

Node Address Status Type Build Protocol DC Segment
consul-consul-server-0 192.168.118.214:8301 alive server 1.8.1 2 dc1
consul-consul-server-1 192.168.227.91:8301 alive server 1.8.1 2 dc1
consul-consul-server-2 192.168.108.161:8301 alive server 1.8.1 2 dc1
k8masterg1m2 10.0.20.102:8301 alive client 1.8.1 2 dc1
k8masterg2m1 192.168.139.139:8301 alive client 1.8.1 2 dc1
k8masterg2m2 192.168.139.72:8301 alive client 1.8.1 2 dc1
k8workerg2w1 192.168.227.90:8301 alive client 1.8.1 2 dc1
k8workerg2w2 192.168.108.162:8301 alive client 1.8.1 2 dc1
k8workerg2w3 192.168.118.215:8301 alive client 1.8.1 2 dc1

现在,当我尝试在 Kubernetes consul pod 中列出服务时,它可以正常工作,如下所示:

/ # consul catalog services

consul
consul-consul-dns-default
consul-consul-server-default
consul-consul-ui-default
ha-rabbitmq-rabbitmq-ha-default
ha-rabbitmq-rabbitmq-ha-discovery-default
kubernetes-default
vault-agent-injector-svc-default
vault-internal-default

但是,当我尝试在本地 VM 中运行相同的命令时,会出现以下错误:

[root@k8masterg1m2 autoinstall]# consul catalog services
Error listing services: Unexpected response code: 500 (rpc error getting client: failed to get conn: rpc error: lead thread didn’t get connection)

由于在本地 VM 中运行的 consul 代理,它能够列出成员,但不能列出服务/节点。 这是预期的行为,还是需要进行任何其他配置才能完成这项工作。

另外,我想知道在 Kubernetes 集群之外的 consul 服务器和 consul agent 之间的通信是如何发生的。

感谢任何帮助。

提前致谢!!

【问题讨论】:

    标签: kubernetes consul


    【解决方案1】:

    您想加入虚拟机是一个奇怪的设置。但是为了让一切正常工作,您需要确保 all the required ports 在 Consul 服务器节点上公开。听起来所有这些端口都暴露在 Kubernetes 集群内而不是外部。

    您没有指定如何部署 Consul,但您可以使用 Kubernetes Services 公开端口。在您的情况下,可能端口 8500 可能是您的 VM 唯一暴露的端口,但可能不是其他端口。如果您想启用所有 Consul 特性/功能,则必须将它们全部公开。

    ✌️

    【讨论】:

      猜你喜欢
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 2020-05-18
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多