我在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
答案 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。