【问题标题】:How can I connect to CockroachDB from outside the Kubernetes cluster?如何从 Kubernetes 集群外部连接到 CockroachDB?
【发布时间】:2017-11-08 07:00:56
【问题描述】:

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

我将一个端口从一个 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"

有人能做到吗?

【问题讨论】:

    标签: kubernetes portforwarding cockroachdb


    【解决方案1】:

    在 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 时,来自 pod 的端口转发才有效,但 statefulset 配置中的 CockroachDB 进程设置为侦听 pod 的主机名(通过 --host 标志配置)。

    【讨论】:

    • 谢谢!现在通过将cockroachdb-public 服务的ExternalIPs 指向具有静态IP 的主节点来使其工作
    • 您能否详细介绍一下,并发布您的配置文件?你使用入口控制器吗?
    • 配置文件是之前链接文档中使用的那个 - raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/…。您可能可以使用入口控制器,但在任何主要的云提供商上,您也可以将您的服务更改为键入 NodePort 或键入 LoadBalancer,如我在答案中链接到的 Kubernetes 文档中所述。
    猜你喜欢
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 2016-08-27
    • 1970-01-01
    • 2019-03-11
    • 2020-06-10
    相关资源
    最近更新 更多