本地VM上的领事与Kubernetes中的领事之间的通信

问题描述

我有一个带有2个主节点和3个工作节点的Kubernetes集群。我已经使用HELM来安装consul安装程序,该安装程序正在运行3个consul服务器和5个consul客户端。

以下是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中运行的领事服务器Pod中使用以下命令来加入本地VM(10.0.20.102)。

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

我可以在Kubernetes的VM和领事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领事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中运行的领事代理上,它能够列出成员,但不能列出服务/节点。 这是预期的行为,还是必须进行其他配置才能完成这项工作。

我还想知道在Kubernetes集群之外的领事服务器和领事代理之间的通信如何发生。

感谢您的帮助。

预先感谢!

解决方法

您想加入虚拟机是一种奇怪的设置。但是,要使所有工作正常进行,您需要确保all the required ports在Consul Server节点上公开。听起来所有这些端口都在Kubernetes集群中公开,但不在外部。

您没有指定部署Consul的方式,但是可以使用Kubernetes Services公开端口。在您的情况下,端口8500可能是VM唯一公开的端口,而其他端口可能不是。如果要启用Consul的所有功能,则必须公开它们。

✌️