首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何连接到kubernetes端点?

如何连接到kubernetes端点?
EN

Stack Overflow用户
提问于 2015-12-08 19:27:00
回答 2查看 7.3K关注 0票数 4

我创建了一个kubernetes服务:

代码语言:javascript
复制
[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连接:

代码语言:javascript
复制
 [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代理日志错误消息:

代码语言:javascript
复制
 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的轻微修改

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

至于修复您的特定情况,我建议不要使其复杂化,并显式设置TargetPortNodePort

票数 1
EN

Stack Overflow用户

发布于 2015-12-09 08:22:26

除了"NodePort“类型的服务之外,还有其他一些方法可以从集群外部与kubernetes服务交互。也许他们会更“自然”和容易:

  • 使用服务类型"LoadBalancer“。它只适用于一些云提供商,而不适用于virtualbox,但我认为了解这个特性会很好。在这种情况下,您不仅将获得服务的“内部集群专用”ip地址,而且还将获得外部配置的负载均衡器来访问它(在aws/gce等中) 链接到文档
  • 使用一个被称为“入口”的最新特性。以下是手动中的描述:“cluster是一组允许入站连接到达集群服务的规则集合,它可以配置为提供外部可访问的urls、负载平衡流量、终止SSL、提供基于名称的虚拟托管等等。”链接到文档
  • 如果kubernetes不是严格的要求,并且您可以切换到最新的openshift源(也就是“类固醇上的kubernetes”),那么您可以使用称为“路由器”的原始特性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34164342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档