【问题标题】:How to expose web application on Docker Desktop / Minikube如何在 Docker Desktop / Minikube 上公开 Web 应用程序
【发布时间】:2021-05-20 05:49:45
【问题描述】:

我使用 Docker Desktop 和 Kubernetes 部署了由 3 个 Pod 组成的简单 .NET Core 应用程序。 我的目标是在我的主机浏览器中公开工作的 Web 应用程序:

Fronend pod 中的我的 React 应用程序将 appsettings.js 文件中的点指向后端集群 IP 服务以从后端获取数据。当我在 Frontend pod 中正常工作时,fetch 工作正常。

使用 NodePort 服务暴露的 Fronend Pod,应用程序可以访问,但我的问题是对后端 pod 的请求失败 - 请求指向后端 ClusterIP 服务,而我的主机无法解决它们。

这应该如何在 Docker Desktop 或 Minikube 等单节点环境中完成? 如果我想在我的前端应用程序中使用多个不同的后端 API,它也应该可以工作。

感谢您的帮助!

【问题讨论】:

    标签: docker kubernetes kubernetes-ingress nginx-ingress docker-desktop


    【解决方案1】:

    在您的情况下,前端和后端都需要可从集群外部访问。所以后端服务的类型必须是NodePortLoadBalancer

    原因是前端不与后端服务交互(在集群中)。 Frontend pod 只是被浏览器用来下载你的 React 应用程序。然后浏览器运行你的 React 应用程序。此应用程序 - 不在您的集群中运行 - 必须使用后端服务。这就是后端服务必须可从外部访问的原因。

    【讨论】:

    • 感谢您的回答!我已经检查过了,它适用于通过 NodePort 公开的后端服务。但是有没有更好的方法来做到这一点? IE。在前端应用程序中,我需要将公开的后端服务地址指定为 localhost:NodePort。与访问前端应用程序相同,localhost:NodePort。我可以以更具描述性的方式公开它们吗?即将配置中的后端服务指定为 backend-api 而不是 localhost:NodePort。我可以使用 Ingress Controller 实现这一点吗?
    • 您可以创建负载均衡器服务(而不是 nodeport)。然后在 minikube 中,您必须运行命令 minikube service service-name。这将为名为“service-name”的服务分配一个 IP。最后,您可以使用 kubectl get services 获取此 IP。并更新您的代码以使用 IP:PORT 调用服务。
    • 如果你需要 URI,你必须安装一个入口控制器来处理这个问题。查看这篇演示如何在 minikube 中使用 traefik 的文章:medium.com/kubernetes-tutorials/…
    【解决方案2】:

    对我来说最简单的方法是使用带有 Ingress Controller 的 minikube - https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/

    【讨论】:

      猜你喜欢
      • 2021-06-05
      • 2021-07-29
      • 1970-01-01
      • 2017-05-16
      • 2020-07-17
      • 1970-01-01
      • 2021-12-17
      • 2011-05-06
      • 1970-01-01
      相关资源
      最近更新 更多