如何定义/使用端点从Javascript连接到Kubernetes

我有一个关于如何构build我的docker堆栈,在两个容器简化以获得帮助在这里的疑问:

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

没有Kubernetes,只有docker-compose在一个节点上, rest只是在不同的端口上侦听,而从Javascript中,请求会转到same_host:rest_port ,这里没有问题。

使用Kubernetes,我知道我需要使用Kubernetes中的服务名称,类似“rest”(使服务本身透明),但是只有在为静态资源提供服务的docker容器中才能看到该名称。

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

谢谢。

使用Kubernetes,我知道我需要使用Kubernetes中的服务名称,类似“rest”(使服务本身透明),但是只有在为静态资源提供服务的docker容器中才能看到该名称。

你的理解是正确的。 只要在群集中运行kube-dns加载项 ,您的服务名称作为域名就可以在同一个kubernetes集群和名称空间中解析。 换句话说,正如你所说的,“休息”只能在kubernetes集群中工作。

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

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

这种方法的好处是,你将避免所有的同源策略/ CORS的麻烦,你的微服务(express)认证细节将从用户的浏览器中抽象出来。 (这不一定是一个优点)。

这种方法的缺点是,你的后端微服务(express)将与前端紧密耦合(反之亦然,取决于你如何看待它),这将使得后端的缩放依赖于前端。 您的后端没有暴露。 所以,如果你有另一个消费者(让我们只是说一个Android应用程序),它将无法访问您的服务。

另一个方案

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