2015-12-08 101 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路由器只需要几条命令 –