【问题标题】:How to define/use endpoints to connect to Kubernetes from Javascript如何定义/使用端点从 Javascript 连接到 Kubernetes
【发布时间】:2017-11-01 04:55:41
【问题描述】:

我对如何构建我的 dockerized 堆栈有疑问,简化为两个容器以在此处获得帮助:

  • 静态:NGINX 提供静态资源 (JS/HTML)。
  • rest:REST Api 的 express.js 后端。

如果没有 Kubernetes,只需在节点上进行 docker-compose,rest 只是在侦听不同的端口,并且从 Javascript 中,请求转到 same_host:rest_port,没有这里有问题。

对于 Kubernetes,我知道我需要使用来自 Kubernetes 的服务名称,例如“rest”(使服务本身透明),但该名称只能从为静态资源提供服务的 docker 容器中看到。

我的问题:我需要将流量从 NGINX 转发到 REST Api 吗?例如,Kubernetes 是否公开了可用于 Javascript 的公共服务名称?

谢谢。

【问题讨论】:

    标签: docker nginx kubernetes


    【解决方案1】:

    对于 Kubernetes,我知道我需要使用来自 Kubernetes,类似于“rest”(使服务透明) 本身),但该名称仅在 docker 容器中可见 提供静态资源。

    你的理解是正确的。 As long as you have a kube-dns add-on running in your cluster,您的服务名称作为域名是可解析的在同一个 kubernetes 集群和命名空间中。换句话说,正如您所说,“rest”只能在 Kubernetes 集群中使用。

    我的问题:我需要将流量从 NGINX 转发到 REST Api 吗? Kubernetes 是否公开了可从 Javascript 使用的公共服务名称, 例如?

    这是实现这一目标的一种方法。

    这种方法的

    优势是,您将避免所有同源策略/CORS 的麻烦,您的微服务(快速)身份验证详细信息将从用户的浏览器中提取出来。 (这不一定是优势)。

    这种方法的

    缺点是,您的后端微服务(express)将与前端紧密耦合(反之亦然,具体取决于您如何看待它),这将使后端依赖在前端。您的后端未公开。因此,如果您有另一个消费者(假设是一个 android 应用),它将无法访问您的服务。

    另一种解决方案

    创建一个入口(并在集群中使用入口控制器)并公开您的微服务(Express)。

    【讨论】:

    • 感谢您的完整回答。我没有使用入口“组件”的经验,但它似乎是正确的解决方案,因为我希望在没有前端的情况下让后端功能齐全。此外,将请求从“静态”转发到“休息”会(直觉)破坏系统的可扩展性,正如我想象的那样。谢谢!。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2019-10-07
    • 2021-10-03
    • 2021-09-04
    • 1970-01-01
    • 2016-12-19
    相关资源
    最近更新 更多