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

标签 docker nginx kubernetes

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

  • static: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 使用的公共(public)服务名称?

    谢谢你。

    最佳答案

    With Kubernetes, I understand that I need to use the service name from Kubernetes, something like "rest" (to make transparent the service itself), but that name would only be visible from the docker container serving the static resources.



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

    My question: do I need to forward traffic from NGINX to the REST Api? Does Kubernetes expose a public service name usable from Javascript, for example?



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

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

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

    另一种解决方案

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

    关于docker - 如何定义/使用端点从 Javascript 连接到 Kubernetes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47022519/

    相关文章:

    docker run swarm create 对比 docker swarm init

    docker - 从 Docker : curl: (56) Recv failure: Connection reset by peer 运行 Jupyter Notebook

    php - 我可以访问正在运行的NGINX容器实​​例的文件系统吗?

    kubernetes - 如果容器未与主机共享内核,则解析cgroup文件以获取统计信息是否可行?

    kubernetes - namespace 上的GKE `ResourceQuota`-限制高于指定的限制

    java - 如何运行我的 Docker 镜像并查看工作应用程序?

    docker - runc 和 ctr 命令不显示 docker 图像和容器

    mysql - 将 SSL 证书添加到 mysql docker 容器

    java - JSESSIONID cookie 未存储在浏览器中

    Kubernetes Helm : "lost connection to pod" and "transport is closing" errors