我创建了一个kubernetes服务:
[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.但是,无法连接到端点,甚至无法从节点主机上的shell连接:
[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.在wget localhost:31982上调用NodePort还会给出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/RriYPRg7,这是对https://github.com/sameersbn/docker-gitlab/blob/master/kubernetes/gitlab-service.yml的轻微修改
发布于 2015-12-08 19:53:21
实际上,出现问题的是Pod或Replication,因为它没有转发到服务。也许发布该配置,或者确保它指定了端口,并且其容器的进程正在侦听正确的端口。
原始
NodePort实际上是暴露在舱外的。Port是节点内NAT网络上的端口,而Port是容器内的进程应该绑定到的端口,通常使用的是服务发现。其他的豆荚会在NodePort上和那个吊舱交谈。如果要显式地为web服务器设置NodePort,那么在Pod的定义或复制控制器或服务定义中,显式地将NodePort设置为所需的端口。
对于Port: 80来说,在侦听端口80的容器中有nginx,那么NodePort: 4980将是公开的端口。所以你会wget <Node IP>:4980。
至于修复您的特定情况,我建议不要使其复杂化,并显式设置TargetPort和NodePort。
发布于 2015-12-09 08:22:26
除了"NodePort“类型的服务之外,还有其他一些方法可以从集群外部与kubernetes服务交互。也许他们会更“自然”和容易:
https://stackoverflow.com/questions/34164342
复制相似问题