【问题标题】:Why can't access my gRPC REST service that is running in Minikube?为什么无法访问我在 Minikube 中运行的 gRPC REST 服务?
【发布时间】:2019-03-04 01:08:11
【问题描述】:

我最近一直在学习 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 集群并从那里调用它(同样,只是为了学习和掌握一切。)
Here is the yaml I'm using to deploy to minikube

这就是我在 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 服务来公开端口?

【问题讨论】:

    标签: kubernetes grpc minikube


    【解决方案1】:

    我检查了您的 yaml 文件,它运行良好。但只有我意识到您为您的服务设置了两种类型,LoadBalancerNodePort,这是不需要的。 就像你从this documentation LoadBalancer 的定义中检查一样,你会看到

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

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

    来自同一个documentation

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

    【讨论】:

    • 啊,这是有道理的,不过是一个快速的问题。如果我想从外部访问服务,是否将其类型设置为 NodePort 就足够了,或者我是否需要 LoadBalancer(如果我理解正确设置了 NodePort)?
    • 您可以通过 LoadBalancer 也可以通过 NodePort 从外部访问您的服务。检查此kubernetes.io/docs/concepts/services-networking/service/… 以更好地了解 NodePort 和 LoadBalancer
    猜你喜欢
    • 1970-01-01
    • 2020-01-14
    • 2021-09-17
    • 2019-11-12
    • 2021-08-03
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多