09_use swarm mode routing mesh

docker engine swarm mode 可以简单的发布服务的端口,让集群外部可以访问到。所有的节点都在同一个路由网格中。路由网格使每个节点都能够接收到集群上面的任意服务的端口。即使该节点没有任务在跑。路由网格在所有可用的节点上面 路由所有的进入的请求到发布的端口的可用容器上面。

为了能够使用路由网格的功能,你需要在节点间开放以下的协议和端口:

端口 7946   TCP/UDP     容器网络发现

端口 4789   UDP              容器内部网络

在一个服务中发布一个端口

--publish

$ docker service create   --name <SERVICE-NAME>   --publish <PUBLISHED-PORT>:<TARGET-PORT>   <IMAGE>

示例:
把内部容器nginx 的80端口发布到外部的8080端口

$ docker service create   --name my-web   --publish 8080:80   --replicas 2   nginx

当你访问swarm 集群的8080端口,swarm会把你的请求负载均衡到所有可用的容器上面。

路由网格监听分配给节点的任意IP的发布端口。如果是外部的路由IP地址,端口即对外也可以访问。其他的IP地址的访问只对该主机可用。

你可以在一个存在的服务中发布一个端口

$ docker service update   --publish-add <PUBLISHED-PORT>:<TARGET-PORT>   <SERVICE>
通过以下命令查看发布的端口

$ docker service inspect --format="{{json .Endpoint.Spec.Ports}}" my-web
[{"Protocol":"tcp","TargetPort":80,"PublishedPort":8080}]

发布一个单独的TCP端口或者是UDP端口

默认发布的端口是TCP端口,如果你要定义一个UDP端口,可以通过以下配置

只定义TCP端口

$ docker service create --name dns-cache -p 53:53 dns-cache
$ docker service create --name dns-cache -p 53:53/tcp dns-cache

同时定义TCP和UDP端口

$ docker service create --name dns-cache -p 53:53/tcp -p 53:53/udp dns-cache

只定义UDP端口

$ docker service create --name dns-cache -p 53:53/udp dns-cache

配置一个外部的负载均衡器

你可以配置一个外部的负载均衡器,来路由所有的请求到swarm服务中。

例如:你可以配置HAproxy来均衡所有的请求到nginx的外部端口8080

在这种情况下,8080端口必须在负载均衡器和swarm集群之间是开放的。

swarm节点能够存在与一个私有的网络,只能通过代理服务器访问,无法直接对外提供访问。

即使在该节点上面没有任务,你也可以配置负载均衡器均衡所有的请求到每个节点。

例如:如下配置的HAproxy的配置

/etc/haproxy/haproxy.cfg:
global
        log /dev/log    local0
        log /dev/log    local1 notice
...snip...
# Configure HAProxy to listen on port 80
frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back
# Configure HAProxy to route requests to swarm nodes on port 8080
backend http_back
   balance roundrobin
   server node1 192.168.99.100:8080 check
   server node2 192.168.99.101:8080 check
   server node3 192.168.99.102:8080 check

当你访问HAproxy 负载均衡器的80端口,它会转发请求到swarm集群的节点。swarm路由网格会路由请求到可用的节点上面。如果swarm scheduler 调度任务请求到不同的节点上面,你不需要重新配置负载均衡器。

你可以配置任何一种类型的负载均衡器来路由swarm节点的请求。

时间: 2024-12-17 16:05:01

09_use swarm mode routing mesh的相关文章

docker深入2-熟悉 ingress routing mesh 的工作方式

2017/9/22 1.目的 总所周知,service 通过 ingress load balancing 来发布服务,且 swarm 集群中所有 node 都参与到 ingress 路由网格(ingress routing mesh) 中,访问任意一个 node+PublishedPort 即可访问到服务. 其中负载均衡相关的原理是怎样的呢? 网络流量是怎样流动的呢? 让我们探索一下吧. 2.具体请参考博文,有空翻译一下. How Docker Swarm Container Networki

神奇的 routing mesh - 每天5分钟玩转 Docker 容器技术(100)

接上一节案例,当我们访问任何节点的 8080 端口时,swarm 内部的 load balancer 会将请求转发给 web_server 其中的一个副本. 这就是 routing mesh 的作用. 所以,无论访问哪个节点,即使该节点上没有运行 service 的副本,最终都能访问到 service. 另外,我们还可以配置一个外部 load balancer,将请求路由到 swarm service.比如配置 HAProxy,将请求分发到各个节点的 8080 端口. ingress 网络 当我

云计算之路-阿里云上-容器难容:自建docker swarm集群遭遇无法解决的问题

我们从今年6月开始在生产环境进行 docker 容器化部署,将已经迁移至 ASP.NET Core 的站点部署到 docker swarm 集群上.开始我们选用的阿里云容器服务,但是在使用过程中我们遭遇了恐怖的路由服务(acsrouting)路由错乱问题 —— 请求被随机路由到集群中的任一容器,虽然后来阿里云修复了这个问题,但我们对容器服务失去了信心,走上了用阿里云服务器自建 docker swarm 集群的道路. 用上自建 docker swarm 集群之后,本以为可以在云上容器中过上安稳的日

Docker3之Swarm

Make sure you have published the friendlyhello image you created by pushing it to a registry. We'll be using that shared image here. Be sure your image works as a deployed container. Run this command, slotting in your info for username, repo, and tag

failover swarm 故障转移

#故障转移 Failover #当其中一个节点关闭宕机时,其节点中的service会转移到另一个节点上.Swarm会检测到node1发生故障并把此故障节点的状态标记为Down; docker node ls 可查看 node1的STATUS 为Down同时 Swarm会把node1上的service调度到其它有资源的节点上来运行:docker service ps web_server 可查看其过程和状态 #访问server #便于分析,重新部署一个 docker service create

swarm 集群配置

Swarm 介绍Swarm 是 Docker 公司在 2014 年 12 月初发布的一套较为简单的工具,用来管理Docker 集群,它将一群 Docker 宿主机变成一个单一的虚拟的主机. Swarm 使用标准的Docker API 接口作为其前端访问入口,换言之,各种形式的 Docker Client(dockerclient in Go, docker_py, docker 等)均可以直接与 Swarm 通信. Swarm 几乎全部用 Go语言来完成开发,Swarm0.2 版本增加了一个新的

docker swarm英文文档学习-8-在集群中部署服务

Deploy services to a swarm在集群中部署服务 集群服务使用声明式模型,这意味着你需要定义服务的所需状态,并依赖Docker来维护该状态.该状态包括以下信息(但不限于): 应该运行服务容器的镜像名称和标记有多少容器参与服务是否有任何端口暴露给集群之外的客户端当Docker启动时,服务是否应该自动启动重启服务时发生的特定行为(例如是否使用滚动重启)服务可以运行的节点的特征(例如资源约束和位置首选项)有关群模式的概述,请参见 Swarm mode key concepts.有关

Docker实践(六):Docker Swarm

环境说明: 主机名 操作系统版本 IP地址 docker版本 说明 manager Ubuntu 16.04.5 172.27.9.71 18.09.2 manager管理主机 work01 Ubuntu 16.04.5 172.27.9.75 18.09.2 worker主机01 work02 Ubuntu 16.04.5 172.27.9.76 18.09.2 worker主机02 本文所有测试都在Vmware虚拟机(版本为12.5.2)上完成ubuntu安装详见:Ubuntu16.04.5

Docker swarm搭建(2)

什么是docker swarm? Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令.目前,Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具.它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络. Docker Swarm 是一个为 IT 运维团队提供集群和调度能力的编排工具