如何在GKE中私下转发cqlsh的连接

时间:2019-05-20 15:29:48

标签: kubernetes google-kubernetes-engine kubectl cqlsh scylla

因此,我试图通过与Kubectl的连接来使用cqlsh连接到GKE中的scylla实例。但是,我遇到了一些棘手的问题,无法解决。

我在GKE上运行scylla,从根本上说,它是一种cassandra仿制品,其运行速度比cassandra本身要快。 要访问scylla,我希望能够使用kubectl port-forward命令连接到db,以便我可以连接外部工具,例如table plus。 当我运行kubectl port-forward pod/scylla-0 -n scylla 9042时,我希望可以从本地计算机访问该端口,但是,当我尝试与cqlsh localy连接时,会收到以下错误消息:

from clqsh: Connection error: ('Unable to connect to any servers', {'127.0.0.1': ConnectionShutdown('Connection to 127.0.0.1 was closed',)})

from kubectl: E0520 17:12:12.522329      51 portforward.go:400] an error occurred forwarding 9042 -> 9042: error forwarding port 9042 to pod <some id>, uid : exit status 1: 2019/05/20 15:12:12 socat[998972] E connect(5, AF=2 127.0.0.1:9042, 16): Connection refused

我还试图将服务直接转发到类似结果

我个人认为这是更奇怪的部分是,当我使用负载均衡器公开scylla时,我可以很好地连接到它,当我转发scylla的JMX端口时,我也可以使用JConsole。对此非常头痛。

1 个答案:

答案 0 :(得分:2)

失败的原因是因为端口转发仅绑定到本地主机(127.0.0.1)。如果您使用

进入吊舱
kubectl exec -ti pod/scylla-0 -n scylla -- /bin/bash
yum install net-tools -y
netstat -nlup | grep scylla 

您会注意到scylla是绑定到容器pod IP而非127.0.0.1的,因此您的连接被拒绝。

尝试: kubectl port-forward --address your_pod_ip pod/mypod 9042:9042

或者: kubectl port-forward --address your_service_ip service/myservice 9042:9042

我自己没有尝试过,但是我认为它可以工作。请让我知道。