【问题标题】:Accessing kubernetes service with nodeport returns with connection refused使用 nodeport 访问 kubernetes 服务返回连接被拒绝
【发布时间】:2020-05-23 21:20:46
【问题描述】:

我已经在 3 个虚拟机(1 个主节点和 2 个工作节点)上安装了我的许可 kubernetes,具有 3 个公共 IP。我尝试通过部署一个带有 nodeport 的 nginx 实例来验证,如下所示:

kubectl create deployment nginx --image=nginx
kubectl create service nodeport nginx --tcp=80:80

nodeport 为我分配了一些端口范围,例如 30269:

NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        5d21h
nginx        NodePort    10.107.68.135   <none>        80:30269/TCP   91m

当我尝试在此端口上卷曲我的 IP 地址时,无论在我的主节点还是在工作节点上,它都会返回连接被拒绝。我确信防火墙确实允许这些端口,因为我尝试使用 docker 在此端口上运行 nginx:

docker run -p 30269:80 -d nginx

我可以通过在端口 30269 上的公共 IP 上运行 curl 来访问 nginx 默认页面

如果我运行netstat,输出是这样的

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:30269           0.0.0.0:*               LISTEN      3396/kube-proxy   
tcp        0      0 127.0.0.1:6784          0.0.0.0:*               LISTEN      3741/weaver 
tcp        0      0 127.0.0.1:10248         0.0.0.0:*               LISTEN      2726/kubelet
...

我应该如何解决问题?

非常感谢您的帮助。

【问题讨论】:

  • 虚拟机同时拥有公有 IP 和私有 ip,相同的 curl 可以通过公共 ip 工作,但不能通过私有 ip?
  • VM网络是从主机桥接的,所以那里只有公网IP,没有私网IP
  • 你能展示一下你是如何安装集群的吗?

标签: nginx kubernetes


【解决方案1】:

您缺少服务如何连接到您的 pod 的规范。

这是通过指定两件事来完成的:

  1. 在 pod 规范中,您需要指定一个标签(比如说app:nginx
  2. 在服务规范中,您需要指定此服务适用于哪些 pod 标签,在您的情况下是上面第 1 节中的标签 - app:nginx

然后,一旦你应用了这些资源,节点端口服务就会将 nginx pod 映射到节点端口。

我强烈建议您阅读这篇文章以更好地了解服务的运作方式:https://kubernetes.io/docs/tasks/access-application-cluster/service-access-application-cluster/

【讨论】:

  • 感谢您的回复,我已尝试使用您提到的 pod 选择器编写一个 yaml 来部署服务和部署。效果是一样的。实际上我有在云服务提供商创建服务的经验。但这是我第一次在 perm 上构建 K8S。
  • 请编辑您的问题并为服务和部署添加 yaml 文件
猜你喜欢
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 2017-06-01
  • 2019-06-01
  • 2020-03-19
  • 2020-05-03
  • 2021-09-13
相关资源
最近更新 更多