首页 > 解决方案 > 为什么无法访问我在 Minikube 中运行的 gRPC REST 服务?

问题描述

我最近一直在学习 Kubernetes,刚好遇到了这个小问题。对于一些健全性检查,这是我在本地运行的 grpc 应用程序的功能:

> docker run -p 8080:8080 -it olamai/simulation:0.0.1
  < omitted logs >
> curl localhost:8080/v1/todo/all
{"api":"v1","toDos":[{}]}

所以它有效!我现在要做的就是在 Minikube 中部署它并公开端口,以便我可以调用它。我的最终目标是将它部署到 GKE 或 Azure 集群并从那里调用它(再次,只是为了学习和掌握一切。)
这是我用来部署到 minikube 的 yaml

这就是我在 minikube 上部署它的方法

> kubectl create -f deployment.yaml

然后我运行它来获取 url

> minikube service sim-service --url
http://192.168.99.100:30588

但这就是我打电话时发生的事情

> curl http://192.168.99.100:30588/v1/todo/all
curl: (7) Failed to connect to 192.168.99.100 port 30588: Connection refused

我在这里做错了什么?

编辑:我想通了,您应该能够在链接文件中看到更新。我将拉策略设置为从不,所以它已经过时了

我现在有一个新问题......我现在能够在 minikube(无 NodePort)中创建部署并仍然调用 api......部署是否应该需要 NodePort 服务来公开端口?

标签: kubernetesgrpcminikube

解决方案


我检查了你的 yaml 文件,它工作得很好。但只有我意识到您为您的服务放置了 2 种类型,这LoadBalancer也是NodePort不需要的。就像您从LoadBalancer 的文档定义中检查一样,您将看到

LoadBalancer:使用云提供商的负载均衡器向外部公开服务。将自动创建外部负载均衡器将路由到的 NodePort 和 ClusterIP 服务。

作为您下一个问题的答案,您可能会将type: LoadBalancer其放入您的部署 yaml 文件中,这就是您无论如何都能看到 NodePort 的原因。如果您放入type: ClusterIPyaml,则服务将仅在集群内公开,您将无法访问集群外的服务。

来自相同的文档

ClusterIP:在集群内部 IP 上公开服务。选择此值使服务只能从集群内访问。这是默认的服务类型


推荐阅读