一次连接到运行在不同Kubernetes集群上的服务

时间:2020-06-24 13:29:45

标签: docker kubernetes

我在db1上运行cluster1,在db2上运行cluster2。它们无法从外部访问,因此要在开发/调试时连接到db,我使用端口转发。

您一次只能将一个群集设置为当前/默认上下文,因此您一次只能移植一个数据库。因此,我不再从本地计算机上一次连接到一个集群,而是启动了两个指向不同集群的docker容器,因此我可以端口转发两个数据库连接,然后将容器端口映射到另一个主机端口,我最终可以通过客户端访问数据库。

$ docker run -d --name cluster1 -p 3306:3306 IMAGE
$ docker run -d --name cluster2 -p 3307:3306 IMAGE

我正在每个容器中

$ kubectl port-forward db-0 3306

在主机上,我尝试连接到localhost和端口号3306-3307。我得到了:

Server not running on the provided host and port.

我也没有尝试将-p 3306:3306与上面的docker run命令一起使用,而是尝试了--expose 3306,然后使用通过docker inspect和端口3306获得的容器IP进行连接,但是那也不起作用。

我有什么想念的吗?我很想知道是否还有其他方法可以归档我要执行的操作。谢谢。

1 个答案:

答案 0 :(得分:0)

正如OP在评论中提到的那样,我的建议行得通,因此我决定将其发布为答案,并附有完整的说明。


kubectl默认情况下绑定到本地接口,因此只能使用localhost ip(127.0.0.1)进行访问。

$ kubectl port-forward <podname> 8080:8080 &
Forwarding from 127.0.0.1:8080 -> 8080

$ ss -lnt | grep 8080
State      Recv-Q Send-Q  Local Address:Port        Peer Address:Port
LISTEN     0      128         127.0.0.1:8080                   *:*

要使其能够从容器外部访问,您需要使用kubectl port-forward --address 0.0.0.0。这将绑定到所有接口。

$ kubectl port-forward <podname> 8080:8080 --address 0.0.0.0 &
Forwarding from 0.0.0.0:8080 -> 8080

$ ss -lnt | grep 8080
State      Recv-Q Send-Q  Local Address:Port        Peer Address:Port
LISTEN     0      128                 *:8080                   *:*