使用nodeport访问kubernetes服务返回并拒绝连接

时间:2020-05-22 07:30:52

标签: nginx kubernetes

我已在具有3个公共ip的3个VM(1个主节点和2个工作节点)上安装了Permise kubernetes。我尝试通过像这样的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地址时,无论在我的主节点上还是在工作节点上,它都会返回Connection拒绝。我确信防火墙确实允许端口,因为我尝试通过以下方式使用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
...

我应该如何继续解决问题?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

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

  1. 在pod规范中,您需要指定标签(例如app:nginx
  2. 在服务规范中,您需要指定此服务应用于哪些吊舱标签(在您的情况下,该标签是上面第1节中的标签-app:nginx

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

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