kubernetes - 为什么无法访问我在 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 服务来公开端口?
解决方案
我检查了你的 yaml 文件,它工作得很好。但只有我意识到您为您的服务放置了 2 种类型,这LoadBalancer
也是NodePort
不需要的。就像您从LoadBalancer 的文档定义中检查一样,您将看到
LoadBalancer:使用云提供商的负载均衡器向外部公开服务。将自动创建外部负载均衡器将路由到的 NodePort 和 ClusterIP 服务。
作为您下一个问题的答案,您可能会将type: LoadBalancer
其放入您的部署 yaml 文件中,这就是您无论如何都能看到 NodePort 的原因。如果您放入type: ClusterIP
yaml,则服务将仅在集群内公开,您将无法访问集群外的服务。
来自相同的文档:
ClusterIP:在集群内部 IP 上公开服务。选择此值使服务只能从集群内访问。这是默认的服务类型
推荐阅读
- angular - 如何在方法内测试订阅
- python - Pandas reset_index() - 将默认值更改为删除索引
- python - 为什么我的字典创建循环中途停止Python
- javascript - 使用 javascript chrome 扩展修改谷歌中网络摄像头的输出
- oracle - 当我使用 Oracle 提供程序 (Oracle.EntityFrameworkCore) 时,EntityFramework Core 返回错误数据
- python - 如何动画按钮从各个方向延伸?
- android - 如何在 Android App Bundle 中将文件添加到 BUNDLE-METADATA/?
- html - SVG:为什么文本没有在矩形内呈现?
- javascript - NodeJS/Express:如何通过将多个输入文本字段与每个自己的文件上传相关联来提交表单?
- ansible - Ansible,线路模块未正确将 JSON 数据保存到文件