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

Pla*_*ato 6 portforwarding kubernetes cockroachdb

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

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

$ 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"
Run Code Online (Sandbox Code Playgroud)

有人设法完成这个吗?

Ale*_*son 6

从Kubernetes集群内部,您可以通过连接cockroachdb-publicDNS名称与数据库通信.在文档中,这对应于示例命令:

kubectl run cockroachdb -it --image=cockroachdb/cockroach --rm --restart=Never -- sql --insecure --host=cockroachdb-public
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 谢谢!现在通过将`cockroachdb-public`服务的`ExternalIPs`指向具有静态ip的主节点来实现它 (2认同)
  • 你能详细介绍一下,发布你的配置文件吗?你使用入口控制器吗? (2认同)