将Krobnetes上的CockroachDB暴露给公共IP

时间:2017-12-30 21:18:54

标签: kubernetes cockroachdb

我在Google Kubernetes Engine的Kubernetes集群中运行了一个CockroachDB实例。我试图暴露端口26257,以便我可以从我的本地机器连接到它。

this answer中所述,端口转发到pod将无效。

我有一个nginx-ingress控制器,用于从我的域名路径映射到服务,所以我尝试使用它:

我将db-cockroachdb-public服务从ClusterIP更改为NodePort:

type: NodePort

我将这些行添加到我的nginx-controller YAML:

-name: postgresql

nodePort: 30472

port: 26257

protocol: TCP

targetPort: 26257

这些线路到我的入口YAML:

- host: db.mydomain.com
  http:
    paths:
    - path: /
      backend:
        serviceName: db-cockroachdb-public
        servicePort: 26257

但是,我无法连接到数据库 - 连接被拒绝。我还试图在nginx控制器中禁用SSL重定向,但它仍然不起作用。

我也尝试过ConfigMap,但它没有做任何事情:

https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/exposing-tcp-udp-services.md

2 个答案:

答案 0 :(得分:2)

有几种方法可以解决这个问题。大多数都与更改您的入口配置或您如何连接到服务有关,我不打算进入。另一个选择是使端口转发工作,以消除对入口机器的需求。

您可以通过稍微修改CockroachDB配置文件来进行端口转发。请将the invocation of the Cockroach binary中的--host标记的名称更改为--advertise-host。这样,除了主机名之外,进程还将侦听localhost,这将使端口转发工作。

编辑:为了跟进这一点,我已将CockroachDB仓库中的默认配置切换为使用--advertise-host而不是--host,因此默认情况下端口转发工作正常。

答案 1 :(得分:0)

我不知道技术上是否应该通过nginx实例代理CockroachDB,但是你的设置因其他原因而失败。在rules部分中指定servicePort时,告诉k8s哪个端口暴露给服务。映射本身默认发生在端口80/443,而不是您想要的端口。因此,您应该尝试在您的情况下询问端口80。