如何从Kubernetes集群外部连接到CockroachDB?

时间:2017-06-07 05:05:44

标签: kubernetes portforwarding cockroachdb

我已经设置并部署了一个Kubernetes状态集,其中包含三个CockroachDB pod as per docs。我的最终目标是在不需要使用kubectl的情况下查询数据库。我的中间目标是查询数据库而不实际炮轰到数据库窗格中。

我将一个端口从一个端口转发到我的本地计算机,并尝试连接:

$ kubectl port-forward cockroachdb-0 26257
Forwarding from 127.0.0.1:26257 -> 26257
Forwarding from [::1]:26257 -> 26257

# later, after attempting to connect:
Handling connection for 26257
E0607 16:32:20.047098   80112 portforward.go:329] an error occurred forwarding 26257 -> 26257: error forwarding port 26257 to pod cockroachdb-0_mc-red, uid : exit status 1: 2017/06/07 04:32:19 socat[40115] E connect(5, AF=2 127.0.0.1:26257, 16): Connection refused


$ cockroach node ls --insecure --host localhost --port 26257
Error: unable to connect or connection lost.

Please check the address and credentials such as certificates (if attempting to
communicate with a secure cluster).

rpc error: code = Internal desc = transport is closing
Failed running "node"

任何人都能成功实现这一目标吗?

1 个答案:

答案 0 :(得分:6)

从Kubernetes群集内部,您可以通过连接cockroachdb-public DNS名称与数据库通信。在the docs中,它对应于示例命令:

kubectl run cockroachdb -it --image=cockroachdb/cockroach --rm --restart=Never -- sql --insecure --host=cockroachdb-public

当该命令使用CockroachDB映像时,您使用的任何Postgres客户端驱动程序在与Kubernetes集群一起运行时应该能够连接到cockroachdb-public

从Kubernetes集群外部连接到数据库将需要公开cockroachdb-public服务。详细信息将在一定程度上取决于您的Kubernetes集群的部署方式,因此我建议您查看其文档: https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#exposing-the-service

如果您感到好奇,转发端口26257无法为您工作的原因是因为只有当pod中的进程正在侦听localhost但是CockroachDB进程时,来自pod的端口转发才有效在statefulset配置中设置监听pod的主机名(通过--host标志配置)。