0

我在我的 Mac 上安装了 minikube,并为我的 nodejs 应用程序创建了部署和服务。我通过使用以下命令获取我的服务的 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 端口转发到我的本地主机,它仅适用于托管集群的同一台计算机,并且当我尝试从同一网络上的另一台计算机访问时(通过集群所在计算机的 IP 地址)已部署)我仍然找不到页面。

提前感谢您的帮助。

4

5 回答 5

4

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

  • 您的本地机器 IP:(166.6.6.6包含 minikube)
  • 您的 minikube IP:(192.168.99.100使用命令检查真实 IP $minikube ip
  • 您的服务'my-nodejs-app'31000的nodePort:(使用命令检查真实的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 将被转发到您的服务 URLhttp://192.168.99.100:31000

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

于 2018-06-23T21:35:02.297 回答
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}

于 2021-02-05T11:22:09.770 回答
0

听起来像是从另一台机器访问它与将服务公开到网络相比。在这种情况下,您需要查看 spec/type:LoadBalancer ( http://kubernetes.io/docs/user-guide/load-balancer/ ) 也就是说,使用 minikube 我会坚持使用单台机器并且仅进行开发测试

于 2016-12-05T07:59:38.703 回答
0

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

节点端口:30000

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

于 2021-03-07T19:29:00.220 回答
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(无法从机器外部访问)。

因此,您可以尝试:从 Guest 到 Host 的 Virtualbox“端口转发”

另一种选择是使用kubectl port-forward将端口从本地主机直接转发到 pod(不幸的是,不是 k8s svc) 。

于 2016-12-06T10:52:28.447 回答