从同一网络中的另一台计算机访问NodePort服务

时间:2016-12-03 06:43:43

标签: kubernetes kubectl minikube

我在我的mac上安装了minikube,并为我的nodejs app创建了部署和服务。我通过使用以下命令获取服务的URL来测试一切正常:

minikube service my-nodejs-app --url然后我在浏览器中运行此URL并获得结果。问题是当我试图从同一网络中的另一台机器访问相同的URL时,它没有工作。

我的服务.yml文件是:

apiVersion: v1
kind: Service
metadata:
  name: my-nodejs-app
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 1337 
    protocol: TCP
    name: app-server
  selector:
    app:  my-nodejs-app  

我尝试使用端口转发将我的pod端口转发到我的localhost,它只能在托管群集的同一台机器上工作,当我尝试从同一网络上的另一台机器访问时(通过机器的IP地址)集群部署的地方)我仍然找不到页面。

感谢先进的任何帮助。

4 个答案:

答案 0 :(得分:3)

您可以使用"port forward a service"。假设:

  • 您的本地计算机IP:166.6.6.6(包含minikube)
  • 您的迷你库IP:192.168.99.100(使用命令$minikube ip检查真实IP)
  • 服务'my-nodejs-app'的nodePort:31000(请检查 使用以下命令的nodePort:$kubectl get service

为了从远程访问服务,可以通过本地计算机中的以下命令将端口(例如31000,建议与nodePort推荐为同一端口)转发到服务:

  

ssh -i〜/ .minikube / machines / minikube / id_rsa docker @ $(minikube ip)-L \ *:31000:0.0.0.0:31000

然后,您可以通过URL http://166.6.6.6:31000访问服务,该URL将转发到您的服务URL http://192.168.99.100:31000

Thx:https://github.com/kubernetes/minikube/issues/877

答案 1 :(得分:1)

可能有点晚了,但如果有人仍然遇到这个问题-

  1. 检查服务列表以及您想要公开的服务(如果存在)
kubectl get svc -n {namespace_name}
  1. 如果是集群 IP 类型,请将类型更改为 NodePort。
kubectl patch svc {service_name} -n {namespace_name} --type='json' -p '[{"op":"replace","path":"/spec/type","value":"NodePort"}]'
  1. 现在为同一网络上的其他机器公开对本地机器可用的上述节点端口:
service_port=$(minikube service {service_name} -n {namespace_name} --url | cut -d':' -f3)
ssh -i ~/.minikube/machines/minikube/id_rsa docker@$(minikube ip) -NL \*:${service_port}:0.0.0.0:${service_port}

现在您只需点击链接即可从同一网络上的其他机器访问上述服务-
{your_hostname}:{node_port}

答案 2 :(得分:0)

如果我理解你的问题:

您机器的IP:192.168.1.4 您的minikube IP:192.168.99.100 从计算机上的浏览器访问您的服务:http://192.168.99.100:30080

现在,让我们说你在另一台机器上,比如说192.168.1.5,你想要访问这项服务。

问题是您需要将机器的端口映射到minikube的30080,因为minikube是在您的机器上运行的VM(无法从您的机器外部访问)。

所以你可以尝试:Virtualbox "port forward" from Guest to Host

另一种方法是使用kubectl port-forward将端口从localhost直接转发到pod(不幸的是不是k8s svc)。

答案 3 :(得分:0)

您尚未在端口中指定 nodePort。 在端口添加以下配置

节点端口:30000

您可以通过 http://[IP 地址]:30000 访问您的服务