2015-12-08 98 views
2

我創建了一個kubernetes服務:如何連接到kubernetes端點?

[[email protected] kubernetes]# kubectl describe service gitlab 
Name:   gitlab 
Namespace:  default 
Labels:   name=gitlab 
Selector:  name=gitlab 
Type:   NodePort 
IP:   10.254.101.207 
Port:   http 80/TCP 
NodePort:  http 31982/TCP 
Endpoints:  172.17.0.4:80 
Port:   ssh 22/TCP 
NodePort:  ssh 30394/TCP 
Endpoints:  172.17.0.4:22 
Session Affinity: None 
No events. 

然而,我無法連接到連接到端點,甚至沒有從節點主機上的外殼:

[[email protected] ~]# wget 172.17.0.4:80 
--2015-12-08 20:22:27-- http://172.17.0.4:80/ 
Connecting to 172.17.0.4:80... failed: Connection refused. 

在NodePort調用wget localhost:31982還給出了Recv failure: Connection reset by peer和KUBE-代理記錄錯誤消息:

Dec 08 20:13:41 Infra-2 kube-proxy[26410]: E1208 20:13:41.973209 26410 proxysocket.go:100] Dial failed: dial tcp 172.17.0.4:80: connection refused 
Dec 08 20:13:41 Infra-2 kube-proxy[26410]: E1208 20:13:41.973294 26410 proxysocket.go:100] Dial failed: dial tcp 172.17.0.4:80: connection refused 
Dec 08 20:13:41 Infra-2 kube-proxy[26410]: E1208 20:13:41.973376 26410 proxysocket.go:100] Dial failed: dial tcp 172.17.0.4:80: connection refused 
Dec 08 20:13:41 Infra-2 kube-proxy[26410]: E1208 20:13:41.973482 26410 proxysocket.go:100] Dial failed: dial tcp 172.17.0.4:80: connection refused 
Dec 08 20:13:41 Infra-2 kube-proxy[26410]: E1208 20:13:41.973494 26410 proxysocket.go:134] Failed to connect to balancer: failed to connect to an endpoint. 

可能是什麼原因這個失敗?

這裏是我的服務配置文件http://pastebin.com/RriYPRg7https://github.com/sameersbn/docker-gitlab/blob/master/kubernetes/gitlab-service.yml

+0

是什麼'wget的172.17.0.4:80'給你? –

+0

@MichaelHausenblas對不起,這給連接拒絕。我不知道爲什麼我檢查了:82在我的問題的原始版本中,我現在糾正了這個問題。 –

+0

我開始認爲這個錯誤可能是由gitlab - pod失敗造成的。這意味着網絡工作正常,但gitlab服務器沒有運行。 –

回答

1

稍微修改它實際上是莢或者是有問題的,因爲它不轉發到該服務複製控制器。也許張貼配置或者確保它指定的端口和集裝箱的進程正在收聽的正確的端口

原始

它,實際上是暴露在吊艙外的NodePortPort是節點內NAT網絡上的端口,Port是容器內的進程應綁定到的內容,通常使用服務發現。其他豆莢將與NodePort上的該豆莢進行交談。如果你想明確地設置NodePort作爲Web服務器,那麼在你的Pod的定義或複製控制器或服務定義中,明確地將NodePort設置爲所需的端口。

那裏有for Port: 80會說nginx裏面的一個容器監聽端口80,然後NodePort: 4980就是暴露的端口。所以你會wget <Node IP>:4980

至於固定你的具體情況,我建議不要複雜它,並明確設置TargetPortNodePort

+0

但'wget localhost:'也給我一個'連接拒絕'。我已經更新了我的問題來澄清這一點。 –

+0

你能告訴我應該如何改變我的服務配置文件嗎?什麼是「wget ...」的調用成功? –

+1

它實際上是Pod或複製控制器有問題,因爲它沒有轉發到服務。也許發佈那個配置或確保它有指定的端口,並且它的容器的進程正在監聽正確的端口。 –

1

除了「NodePort」類型的服務之外,還有一些其他方式可以與集羣外部的kubernetes服務進行交互。也許它們會更加「自然」且容易:

  • 使用服務類型「LoadBalancer」。它僅適用於某些雲提供商,並且不適用於virtualbox,但我認爲了解該功能會很好。在這種情況下,您不僅可以獲得服務的「僅內部羣集」IP地址,還可以獲得外部配置的負載平衡器以訪問它(在aws/gce等中)Link to the documentation
  • 使用稱爲「入口」 。這裏是從手冊的描述「入口是允許入站連接到達集羣服務的規則的集合,它可以被配置爲給外部可訪問的URL提供服務,負載平衡流量,終止SSL,提供基於名稱的虛擬主機等。 「Link to the documentation
  • 如果kubernetes不是嚴格的要求,您可以切換到最新的openshift原點(即「類固醇上的kubernetes」),您可以使用稱爲「路由器」的原點功能。
+0

我使用的kubernetes-installation在我們自己的裸機上運行,​​所以沒有機會使用外部提供的LoadBalancer,對吧? –

+0

我打算在其中一個節點上設置一個nginx代理,它將傳入的流量導向正確的服務的NodePort。 –

+1

如果使用裸機安裝,則無法使用外部LoadBalancer。但是你仍然可以使用入口/出發路線,並且它會更容易/更健壯的解決方案。例如,部署基本的openshift路由器只需要幾條命令 –