How to connect to kubernetes endpoint?

时间:2015-12-08 19:27:00

标签: kubernetes

I have created a kubernetes service:

d = {1: [[0,100], [100, 500], [500, 800]], 2: [[0, 700], [800, 1000]]}
for a in d.keys():
    x = [[i,i+1] for i,v in enumerate(d[a][:-1]) if v[1] != d[a][i+1][0]]
    if len(x) > 0:
        print a

However, am unable to connect to connect to the Endpoint, not even from the shell on the node host:

[root@Infra-1 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.

Calling [root@Infra-2 ~]# 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. on the NodePort also gives a wget localhost:31982 and the kube-proxy logs error messages:

Recv failure: Connection reset by peer

What could be the reason for this failure?

Here is my service configuration file http://pastebin.com/RriYPRg7, a slight modification of https://github.com/sameersbn/docker-gitlab/blob/master/kubernetes/gitlab-service.yml

2 个答案:

答案 0 :(得分:1)

实际上,Pod或复制控制器存在问题,因为它没有转发到服务。也许发布该配置或确保它已指定端口并且其容器的进程正在侦听正确的端口

<强>原始

实际上是在pod之外暴露的NodePortPort是节点内NAT网络上的端口,Port是容器内部进程应绑定的​​端口,通常使用服务发现。其他pod将与NodePort上的该pod进行通信。如果要为Web服务器明确设置NodePort,则在Pod的定义或复制控制器或服务定义中,将NodePort显式设置为所需的端口。

Port: 80可以说在监听端口80的容器中使用nginx,然后NodePort: 4980将是暴露的端口。所以你会wget <Node IP>:4980

就修复您的具体情况而言,我建议不要将其复杂化并明确设置TargetPortNodePort

答案 1 :(得分:1)

除了&#34; NodePort&#34;服务类型还有一些其他方法可以与集群外部的kubernetes服务进行交互。也许他们会更自然&#34;而且容易:

  • 使用服务类型&#34; LoadBalancer&#34;。它仅适用于某些云提供商,并且不适用于虚拟机,但我认为了解该功能会很好。在这种情况下,您不仅可以获得内部群集,而且还可以获得#34;您的服务的IP地址,但外部配置的负载均衡器访问它(在aws / gce等)Link to the documentation
  • 使用名为&#34; ingress&#34;的最新功能之一。以下是手册中的说明&#34; Ingress是一组允许入站连接到达群集服务的规则。它可以配置为提供外部可访问的URL,负载平衡流量,终止SSL,提供基于名称的虚拟主机等服务。&#34; Link to the documentation
  • 如果kubernetes不是严格的要求,你可以切换到最新的openshift原点(&#34; kubernetes on steroids&#34;)你可以使用名为&#34; router&#34;的原点功能。