当前位置:首页 > 科技  > 软件

能更好集成容器的反向代理工具Traefik的简单使用

来源: 责编: 时间:2024-04-02 17:22:37 256观看
导读需求WebAPI 接口中有两大类业务,当然根据具体情况可以是若干类。例如:workflow 和 interface,分别代表流程平台和接口平台。在集群部署模式下,可以根据不同的路由分配到不同的节点。例如:一共部署了 10 个节点,workflow 分

rFH28资讯网——每日最新资讯28at.com

需求

WebAPI 接口中有两大类业务,当然根据具体情况可以是若干类。例如:workflow 和 interface,分别代表流程平台和接口平台。rFH28资讯网——每日最新资讯28at.com

在集群部署模式下,可以根据不同的路由分配到不同的节点。例如:一共部署了 10 个节点,workflow 分布式到其中的 3 个节点,interface 分布式到其余的 7 个节点。rFH28资讯网——每日最新资讯28at.com

这种方式的好处就是对于只有单一技术栈的团队,在物理上可以将代码组织在一起,方便维护,但在逻辑上可以将不同的业务分开,实现动态扩展和弹性。rFH28资讯网——每日最新资讯28at.com

当然上面的需求使用 nginx 也可以很容易做到,但本文采用的是 Træfɪk ,先来看看 Træfɪk 和 nginx 的区别。rFH28资讯网——每日最新资讯28at.com

Traefik 和 Nginx 的区别

Traefik 和 Nginx 都是反向代理工具,但它们在设计和使用场景上存在一些区别。下面简要比较一下这两者:rFH28资讯网——每日最新资讯28at.com

  • Traefik 可以无须重启即可更新配置,Nginx 据说能做到(没有验证过)。
  • Traefik 可以自动的服务发现与负载均衡,Nginx 需要借助一些第三方工具。
  • Traefik 对  Docker、Kubernetes、Swarm 的支持更好。
  • Traefik 有漂亮的 dashboard 界面。
  • Traefik 在功能上没有 Nginx 丰富,网上资料、案例也比 Nginx 少。
  • Traefik 性能比 Nginx 要差,但具体差别多大,还未验证。

环境

  • Traefik:v3.0.0-rc2
  • 操作系统:macOS13.0
  • Docker:20.10.13

Traefik 简单示例

Traefik 使用 docker-compose 进行部署,部署前先创建一个 docker 网络:rFH28资讯网——每日最新资讯28at.com

docker network create traefik-net

创建一个 traefik-demo 的目录,目录中创建 docker-compose.yml 文件,用来构建一个 Traefik 容器。rFH28资讯网——每日最新资讯28at.com

version: "3"services:  traefik:    image: traefik:v3.0.0-rc2    restart: always    ports:      - 80:80    volumes:      - /var/run/docker.sock:/var/run/docker.sock    command:       - "--api=true"      - "--api.dashboard=true"      - "--api.insecure=true"      - "--entrypoints.http.address=:80"      - "--providers.docker=true"    labels:      - "traefik.http.routers.traefik-dashboard.entrypoints=http"      - "traefik.http.routers.traefik-dashboard.rule=Host(`traefik.fw.com`)"      - "traefik.http.routers.traefik-dashboard.service=dashboard@internal"      - "traefik.http.routers.traefik-dashboard-api.entrypoints=http"      - "traefik.http.routers.traefik-dashboard-api.rule=Host(`traefik.fw.com`) && PathPrefix(`/api`)"      - "traefik.http.routers.traefik-dashboard-api.service=api@internal"    networks:      - traefik-net      networks:  traefik-net:    external: true    name: traefik-net
  • /var/run/docker.sock:/var/run/docker.sock:允许 Traefik 访问 Docker 守护进程,用于自动发现 Docker 服务,允许 Traefik 订阅 Docker 服务事件,来动态的添加或删除要对用户暴露的网络服务。
  • --api=true:启用 Traefik API。
  • --api.dashboard=true:启用 Traefik 的 Web UI。
  • --api.insecure=true:允许不安全的 API 和 Web UI 访问。
  • --entrypoints.http.address=:80:设置 HTTP 入口点在容器的 80 端口。
  • --providers.docker=true:启用 Docker 作为服务提供者。

通过在 Docker Labels 中添加了声明式的路由,分别将 Dashboard 的网页(路由名称  traefik-dashboard )和 API (路由名称 traefik-dashboard-api )注册在了我们创建的 http 网络入口上,用户就可以通过我们设置的域名来访问服务了。rFH28资讯网——每日最新资讯28at.com

  • traefik.http.routers.traefik-dashboard.entrypoints=http: 为 Traefik dashboard 设置入口点。
  • traefik.http.routers.traefik-dashboard.rule=Host(traefik.fw.com):设置访问 Traefik dashboard 的主机规则。
  • traefik.http.routers.traefik-dashboard.service=dashboard@internal:指定 Traefik dashboard 使用内部服务。
  • traefik.http.routers.traefik-dashboard-api.entrypoints=http:为 Traefik API 设置入口点。
  • traefik.http.routers.traefik-dashboard-api.rule=Host(traefik.fw.com) && PathPrefix(/api):设置访问 Traefik API 的主机和路径前缀规则。
  • traefik.http.routers.traefik-dashboard-api.service=api@internal:指定 Traefik API 使用内部服务。

上面的配置中有一个域名:traefik.fw.com ,这是我本地测试使用的域名,正式环境替换为真实域名即可。本地测试可以通过修改 hosts 文件的方式:rFH28资讯网——每日最新资讯28at.com

cd /etc/sudo chmod 777 hostsvi hosts

添加映射:rFH28资讯网——每日最新资讯28at.com

127.0.0.1 traefik.fw.com

在 traefik-demo 目中中执行 docker-compose up -d traefik 来构建 Traefik 服务,执行成功后,在浏览器中访问:traefik.fw.com ,可以看到如下界面:rFH28资讯网——每日最新资讯28at.com

rFH28资讯网——每日最新资讯28at.com

可以看到 Services 有 10 个,其中包含了我本机上部署的其他的 docker 容器。rFH28资讯网——每日最新资讯28at.com

使用官方的测试容器来进行测试,修改 docker-compose.yml 文件,在下面添加如下内容:rFH28资讯网——每日最新资讯28at.com

whoami:    image: containous/whoami        labels:      - "traefik.enable=true"      - "traefik.http.routers.whoami.rule=Host(`whoami.fw.com`)"      - "traefik.http.services.whoami.loadbalancer.server.port=80"    networks:      - traefik-net

执行 docker-compose up -d whoami 进行构建,构建成功后,命令行执行:curl -H Host:whoami.fw.com http://127.0.0.1。rFH28资讯网——每日最新资讯28at.com

rFH28资讯网——每日最新资讯28at.com

现在使用命令:docker-compose up -d --scale whoami=2 对 whoami 服务进行扩容,创建成功后,再使用:curl -H Host:whoami.fw.com http://127.0.0.1 进行测试,会发现已经在两个容器间进行负载了:rFH28资讯网——每日最新资讯28at.com

rFH28资讯网——每日最新资讯28at.com

使用 WebAPI 示例进行验证

使用 C# 编写 WebAPI 接口,创建两个 Controller 模拟两个不同的业务,InterfaceCenterController 和 WorkflowController ,代码如下:rFH28资讯网——每日最新资讯28at.com

[ApiController]    [Route("[controller]")]    public class WorkflowController : ControllerBase    {        [HttpGet()]        public string Test()        {            string ip = Request.HttpContext.Connection.LocalIpAddress.MapToIPv4().ToString() + ":" +                         Request.HttpContext.Connection.LocalPort.ToString();            return $"workflow server,{ip}";        }    }        [ApiController]    [Route("[controller]")]    public class InterfaceCenterController : ControllerBase    {        [HttpGet()]        public string Test()        {             string ip = Request.HttpContext.Connection.LocalIpAddress.MapToIPv4().ToString() + ":" +                      Request.HttpContext.Connection.LocalPort.ToString();            return $"interfaceCenter server,{ip}";        }    }

代码写好后,进行发布,在发布目录中创建 Dockerfile 文件,内容如下:rFH28资讯网——每日最新资讯28at.com

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1COPY . /appWORKDIR /appEXPOSE 80/tcpENTRYPOINT ["dotnet", "ApiDemo.dll"]

执行下面命令进行镜像构建:rFH28资讯网——每日最新资讯28at.com

docker build -t apidemo .

修改 traefik-demo 目录中的 docker-compose.yml 文件,在下面添加如下内容:rFH28资讯网——每日最新资讯28at.com

apidemo:    image: apidemo     labels:      - "traefik.enable=true"      - "traefik.http.routers.apidemo.entrypoints=http"      - "traefik.http.routers.apidemo.rule=Host(`apidemo.fw.com`)  && PathPrefix(`/workflow`)"      - "traefik.http.services.apidemo.loadbalancer.server.port=80"    networks:      - traefik-net  apidemo-1:    image: apidemo     labels:      - "traefik.enable=true"      - "traefik.http.routers.apidemo-1.entrypoints=http"      - "traefik.http.routers.apidemo-1.rule=Host(`apidemo.fw.com`) && PathPrefix(`/interfacecenter`)"      - "traefik.http.services.apidemo-1.loadbalancer.server.port=80"    networks:      - traefik-net
  • 在 apidemo 中配置了路由 PathPrefix(/workflow) 表示只接受工作流平台的业务。
  • 在 apidemo-1 中配置了路由 PathPrefix(/interfacecenter) 表示只接受接口平台的业务。

在上面 labels 的路由配置中使用了 apidemo.fw.com 的域名,同样,这个域名也需要配置到 hosts 文件中:rFH28资讯网——每日最新资讯28at.com

127.0.0.1 traefik.fw.com apidemo.fw.com

执行下面的命令进行容器的构建:rFH28资讯网——每日最新资讯28at.com

docker-compose up -d apidemodocker-compose up -d apidemo-1

使用 Postman 进行测试:rFH28资讯网——每日最新资讯28at.com

rFH28资讯网——每日最新资讯28at.com

rFH28资讯网——每日最新资讯28at.com

  • 当访问 workflow 路由时,返回的容器 IP 一直都是 172.18.0.2。
  • 当访问 interfacecenter 路由时,返回的容器 IP 一直都是 172.18.0.4。

本文链接:http://www.28at.com/showinfo-26-80876-0.html能更好集成容器的反向代理工具Traefik的简单使用

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Node.js 纪录片都讲了什么?我做了这些关键时间线的总结!

下一篇: .NET字符串内存管理:常量字符串、动态创建和字符串池的巧妙结合

标签:
  • 热门焦点
  • 7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月登场的新机有努比亚Z50S Pro和红魔8S Pro,除了三星之外目前唯二的两款搭载超频版骁龙8Gen2处理器的产品,而且努比亚和红魔也一贯有着不错的性价比,所以在本次的性价比榜单
  • 6月iOS设备性能榜:M2稳居榜首 A系列只能等一手3nm来救

    没有新品发布,自然iOS设备性能榜的上榜设备就没有什么更替,仅仅只有跑分变化而产生的排名变动,毕竟苹果新品的发布节奏就是这样的,一年下来也就几个移动端新品,不会像安卓厂商,一
  • 如何通过Python线程池实现异步编程?

    线程池的概念和基本原理线程池是一种并发处理机制,它可以在程序启动时创建一组线程,并将它们置于等待任务的状态。当任务到达时,线程池中的某个线程会被唤醒并执行任务,执行完任
  • 只需五步,使用start.spring.io快速入门Spring编程

    步骤1打开https://start.spring.io/,按照屏幕截图中的内容创建项目,添加 Spring Web 依赖项,并单击“生成”按钮下载 .zip 文件,为下一步做准备。请在进入步骤2之前进行解压。图
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein“利用市场支配力量强迫服装厂商与之签订独家
  • 认真聊聊东方甄选:如何告别低垂的果实

    来源:山核桃作者:财经无忌爆火一年后,俞敏洪和他的东方甄选依旧是颇受外界关心的“网红”。7月5日至9日,为期5天的东方甄选“甘肃行”首次在自有App内直播,
  • 华为Mate 60系列用上可变灵动岛:正式版体验将会更出色

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 2022爆款:ROG魔霸6 冰川散热系统持续护航

    喜逢开学季,各大商家开始推出自己的新产品,进行打折促销活动。对于忠实的端游爱好者来说,能够拥有一款梦寐以求的笔记本电脑是一件十分开心的事。但是现在的
Top