docker swarm模式多个服务同一端口

2023-12-23

假设您的拓扑上有两个服务

  1. API
  2. 网页界面

两者都假设在端口 80 上运行。

在 docker swarm 上,当您创建服务时,如果您想在集群外部访问它,您需要公开并将端口从服务映射到节点(外部端口)。但是,如果您将端口 80 映射到 API 服务,那么您就无法为 Web Interface 服务映射相同的端口,因为它已经被映射了。

这该如何解决呢?

据我所知,不支持此用例。即使您想拥有一个大型集群,并且由于这种行为,您的所有服务和应用程序都将无法实现。

我错过了什么吗?

有什么模式可以解决这个问题吗?


你可以看看Docker 流程​​:代理 https://github.com/vfarcic/docker-flow-proxy用作易于配置的反向代理。

但是,我相信,正如其他评论员所指出的那样,Docker 1.12 群模式存在一个根本问题,即多个服务公开同一端口(例如 80 或 8080)。 它归结为(我认为)网状路由魔法 - 这是 4 级四级的东西,基本上意味着 TCP/IP - 换句话说,IP 地址 + 端口。 因此,当多个服务在(例如)端口 8080 上列出时,事情会变得混乱。网状路由器会很乐意将前往端口 8080 的流量传递给公开同一端口的任何服务。

您可以在群体模式下使用覆盖网络将事物彼此隔离,但是当您必须将服务连接到代理(覆盖网络)时,问题就出现了 - 那时看起来事情变得混乱了(这就是我所在的地方)现在遇到困难)。

我目前的解决方案是让需要暴露给网络的服务使用唯一的端口,就面向代理(覆盖)网络而言(它们不必发布到群!),然后实际使用 Docker Flow Proxy 之类的东西来处理所需端口上的传入流量。

快速示例让您开始(大致基于this https://technologyconversations.com/2016/08/01/integrating-proxy-with-docker-swarm-tour-around-docker-1-12-series/:

    docker network create --driver overlay proxy
    docker network create --driver overlay my-app
    # App1 exposed port 8081
    docker service create --network proxy --network my-app --name app1 myApp1DockerImage
    docker service create --name proxy \
    -p 80:80 \
    -p 443:443 \
    -p 8080:8080 \
    --network proxy \
    -e MODE=swarm \
    vfarcic/docker-flow-proxy
    #App2 exposes port 8080
    docker service create --network proxy --network my-app --name app2 myApp2DockerImage

然后,您根据其配置反向代理文档 https://github.com/vfarcic/docker-flow-proxy/blob/master/articles/swarm-mode.md.

注意:我看到现在有新的AUTO https://github.com/vfarcic/docker-flow-proxy/blob/master/articles/swarm-mode-listener.md可用配置 - 我还没有尝试过。

如果一切正常的话最终结果:

  • 代理侦听端口 80、443(以及用于配置调用的 8080,因此请使其远离公共网络!)
  • 代理转发到适当的服务,基于service domain or service path(我遇到了问题service path)
  • 服务可以通过隔离的覆盖网络进行内部通信。
  • 服务不会向集群发布不必要的端口

[编辑2016/10/20]

忽略上面关于连接到代理的同一覆盖网络上的相同暴露端口的问题的所有内容。

我拆除了我的设置,然后重新开始 - 现在一切都按预期工作:我可以通过 docker flow 代理使用不同的域访问端口 80 上的多个(不同的)服务。

还使用提到的自动配置 - 一切都像魅力一样工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker swarm模式多个服务同一端口 的相关文章

随机推荐