kubernetes - 我如何在 GKE 中私下转发 cqlsh 的连接
问题描述
因此,我试图通过打开与 Kubectl 的连接来使用 cqlsh 连接到 GKE 中的我的 scylla 实例。然而,我遇到了一些我无法理解的奇怪问题。
我在 GKE 上运行 scylla,它基本上是一个 cassandra 仿冒品,应该比 cassandra 本身运行得更快。要访问 scylla,我希望能够使用 kubectl port-forward 命令连接到数据库,这样我就可以连接外部工具,例如 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,这就是为什么我有这么多对此感到头疼。
解决方案
它失败的原因是端口转发只绑定到本地主机(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
我自己没有尝试过,但我认为它可以工作。请告诉我。
推荐阅读
- sql - 检查多个接受期间的日期期间(例如许可期间与使用期间)
- cmpl - 农场问题 错误 运筹学 cpml Coliop
- node.js - 错误:./src/index.js 尝试导入错误:“./App”不包含默认导出(导入为“App”)
- pandas - 熊猫按条件划分
- java - Toast 不显示在屏幕上
- django-cms - 从应用数据自动生成页面
- r - 获取R中列中字符串的最后一个元素?
- pandas - Pandas 使用月平均值按行排列的逐元素变异性
- node.js - (MERN 应用程序)在 Heroku 部署上返回 504(网关超时)的所有 API 调用,但在本地工作正常
- python - Django - 无法运行“py manage.py runserver”