2017-06-07 108 views
4

我已經設置並部署了一個Kubernetes有狀態集,其中包含三個CockroachDB pod,as per docs。我的最終目標是查詢數據庫而不需要使用kubectl。我的中間目標是查詢數據庫而不實際將數據庫放入數據庫窗格中。如何從Kubernetes集羣外部連接到CockroachDB?

我轉交了一個吊艙一個端口到我的本地機器,並試圖連接:

$ 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" 

任何人都設法做到這一點?

回答

3

從Kubernetes集羣內部,您可以通過連接cockroachdb-public DNS名稱與數據庫交談。在the docs,對應於示例命令:雖然該命令使用CockroachDB圖像

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

,你使用任何Postgres的客戶端應用程序應該能夠與Kubernetes集羣上運行時連接到cockroachdb-public

從Kubernetes集羣外部連接到數據庫將需要公開cockroachdb-public服務。細節將一定程度上取決於你的Kubernetes集羣是如何部署的,所以我建議對檢查出的文檔: https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#exposing-the-service

而如果你很好奇,原因轉發端口26257的工作不適合你是因爲如果pod中的進程正在本地主機上偵聽,而pod的主機名(通過--host標誌配置),則狀態集配置中的CockroachDB進程將被設置爲監聽pod的端口轉發。

+2

謝謝!通過將'cockroachdb-public'服務的'ExternalIPs'指向具有靜態ip – Plato

+1

的主節點,現在可以瞭解更多細節,併發布您的配置文件?你使用入口控制器嗎? – skunkwerk

+1

配置文件是以前鏈接的文檔中使用的配置文件 - https://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/cockroachdb-statefulset.yaml。您大概可以使用入口控制器,但在任何主要雲提供商上,您也可以將服務更改爲鍵入'NodePort'或鍵入'LoadBalancer',如我在答案中鏈接到的Kubernetes文檔中所述。 –