Easy-DotNET Easy-DotNET
🏠首页
  • 知识地图
  • 源码脑图

    • 总览
    • Program
    • WebApplication
    • Host主机
    • WebHost主机
    • 依赖注入
    • Autofac
    • Middleware中间件
    • RateLimiter限制速率
    • 响应缓存、请求解压缩
  • 设计初衷
  • 克隆
  • 类型转换
  • 日期时间
  • IO流
  • 工具类
  • 语言特性
  • 集合类
  • Codec编码
  • 文本操作
  • 数学
  • 图片
  • 网络
  • Emoji表情
  • C# 12
  • C# 11
  • C# 10
  • C# 9.0
  • C# 8.0
  • C# 早期版本
  • C# 教程
  • ORM
  • 定时任务
  • 日志
  • 认证与授权
  • Swagger
  • 对象映射
  • 熔断重试限流
  • 缓存
  • 注册发现
  • 网关
  • GraphQL
  • 更多
  • Docker

    • 简介
    • Adminer
    • Apisix
    • Apollo
    • Cassandra
    • Cerebro
    • ClickHouse
    • Consul
    • EasyMock
    • Elasticsearch
    • Emqx
    • FastDFS
    • Flink
    • Gitlab
    • Jenkins
    • Jrebel
    • MariaDB
    • MySQL
    • Percona
    • Phpmyadmin
    • PostgreSQL
    • Redis
  • Linux

    • 查看Linux系统信息
    • CentOS7调整磁盘分区
    • IO压测
    • 图形化监控工具Cockpit
  • 总览
  • 列表

    • 算法数据结构
    • API
    • 应用框架
    • 应用模板
    • 操作系统
    • 工作流
    • 入门套件
    • 示例
    • 人工智能
    • 程序集
    • Assets
    • 认证授权
    • Blazor
    • 区块链
    • 书籍
    • 自动构建
    • 报表
    • 缓存
    • 日历
    • 聊天
    • CLI
    • CLR
    • CMS
    • 代码分析和指标
    • 代码片段
    • 压缩
    • 持续集成
    • 密码学
    • 数据库
    • 数据库驱动
    • 日期时间
    • 反编译
    • 部署
    • DirectX
    • 分布式计算
    • DLR
    • 文档
    • 电商支付
    • 模拟器
    • 环境管理
    • ETL
    • 事件消息
    • Exception
    • 扩展
    • 函数式编程
    • 游戏引擎
    • GIS
    • Git工具
    • 绘图
    • GraphQL
    • GUI
    • HTML-CSS
    • HTTP
    • IDE
    • 图片处理
    • 安装工具
    • 交互式编程
    • 国际化
    • 互操作性
    • IoC
    • JS引擎
    • 日志
    • 机器学习和数据科学
    • Markdown
    • 邮件
    • 数学
    • 媒体
    • 指标
    • 微型框架
    • 最小化器
    • MVVM
    • 网络
    • 对象映射
    • Office
    • OpenAI
    • ORM
    • 包管理器
    • PDF
    • 性能分析工具
    • 协议
    • 推送通知
    • SQL构建器
    • 消息队列
    • RPC
    • 响应式编程
    • 实时通信
    • 正则表达式
    • 任务调度
    • SDK和API
    • 搜索引擎
    • 序列化
    • SMS
    • 状态机
    • 静态站点生成
    • 强命名
    • 风格指南
    • 模板引擎
    • 测试
    • 工具
    • 交易
    • UI自动测试
    • Visual Studio 插件
    • Web浏览器
    • Web框架
    • WebServers
    • WebSocket
    • Windows服务
    • WPF
    • 解析器
    • 源码生成
    • 其他
    • 资源
  • AspNetCore面试题
  • Elasticsearch面试题
  • MongoDB面试题
  • MySql面试题
  • Nginx面试题
  • RabbitMQ面试题
  • Redis面试题
  • 设计模式
  • 微服务
🧑‍💻.NET Blog
GitHub (opens new window)
🏠首页
  • 知识地图
  • 源码脑图

    • 总览
    • Program
    • WebApplication
    • Host主机
    • WebHost主机
    • 依赖注入
    • Autofac
    • Middleware中间件
    • RateLimiter限制速率
    • 响应缓存、请求解压缩
  • 设计初衷
  • 克隆
  • 类型转换
  • 日期时间
  • IO流
  • 工具类
  • 语言特性
  • 集合类
  • Codec编码
  • 文本操作
  • 数学
  • 图片
  • 网络
  • Emoji表情
  • C# 12
  • C# 11
  • C# 10
  • C# 9.0
  • C# 8.0
  • C# 早期版本
  • C# 教程
  • ORM
  • 定时任务
  • 日志
  • 认证与授权
  • Swagger
  • 对象映射
  • 熔断重试限流
  • 缓存
  • 注册发现
  • 网关
  • GraphQL
  • 更多
  • Docker

    • 简介
    • Adminer
    • Apisix
    • Apollo
    • Cassandra
    • Cerebro
    • ClickHouse
    • Consul
    • EasyMock
    • Elasticsearch
    • Emqx
    • FastDFS
    • Flink
    • Gitlab
    • Jenkins
    • Jrebel
    • MariaDB
    • MySQL
    • Percona
    • Phpmyadmin
    • PostgreSQL
    • Redis
  • Linux

    • 查看Linux系统信息
    • CentOS7调整磁盘分区
    • IO压测
    • 图形化监控工具Cockpit
  • 总览
  • 列表

    • 算法数据结构
    • API
    • 应用框架
    • 应用模板
    • 操作系统
    • 工作流
    • 入门套件
    • 示例
    • 人工智能
    • 程序集
    • Assets
    • 认证授权
    • Blazor
    • 区块链
    • 书籍
    • 自动构建
    • 报表
    • 缓存
    • 日历
    • 聊天
    • CLI
    • CLR
    • CMS
    • 代码分析和指标
    • 代码片段
    • 压缩
    • 持续集成
    • 密码学
    • 数据库
    • 数据库驱动
    • 日期时间
    • 反编译
    • 部署
    • DirectX
    • 分布式计算
    • DLR
    • 文档
    • 电商支付
    • 模拟器
    • 环境管理
    • ETL
    • 事件消息
    • Exception
    • 扩展
    • 函数式编程
    • 游戏引擎
    • GIS
    • Git工具
    • 绘图
    • GraphQL
    • GUI
    • HTML-CSS
    • HTTP
    • IDE
    • 图片处理
    • 安装工具
    • 交互式编程
    • 国际化
    • 互操作性
    • IoC
    • JS引擎
    • 日志
    • 机器学习和数据科学
    • Markdown
    • 邮件
    • 数学
    • 媒体
    • 指标
    • 微型框架
    • 最小化器
    • MVVM
    • 网络
    • 对象映射
    • Office
    • OpenAI
    • ORM
    • 包管理器
    • PDF
    • 性能分析工具
    • 协议
    • 推送通知
    • SQL构建器
    • 消息队列
    • RPC
    • 响应式编程
    • 实时通信
    • 正则表达式
    • 任务调度
    • SDK和API
    • 搜索引擎
    • 序列化
    • SMS
    • 状态机
    • 静态站点生成
    • 强命名
    • 风格指南
    • 模板引擎
    • 测试
    • 工具
    • 交易
    • UI自动测试
    • Visual Studio 插件
    • Web浏览器
    • Web框架
    • WebServers
    • WebSocket
    • Windows服务
    • WPF
    • 解析器
    • 源码生成
    • 其他
    • 资源
  • AspNetCore面试题
  • Elasticsearch面试题
  • MongoDB面试题
  • MySql面试题
  • Nginx面试题
  • RabbitMQ面试题
  • Redis面试题
  • 设计模式
  • 微服务
🧑‍💻.NET Blog
GitHub (opens new window)
npm
  • 简介
  • ORM

    • EFCore
    • Dapper
    • FreeSql
    • SqlSugar
  • 任务调度

    • Hangfire
    • Quartz
    • FluentScheduler
    • Coravel
    • Quartzmin
  • 日志

    • Serilog
    • NLog
    • Log4Net
    • Stackdriver
    • ExceptionLess
  • 身份认证与授权

    • IdentityServer4
    • Identity
    • JWTBearer
    • Auth0
    • OpenIddict
  • Swagger文档

    • Swagger
    • Swashbuckle
    • NSwag
    • ReDoc
  • 对象映射

    • AutoMapper
    • EmitMapper
    • AgileMapper
    • Mapster
  • 消息传递

    • MediatR
    • MassTransit
    • Rebus
    • NServiceBus
  • 熔断重试限流

    • Polly
    • Resilience4j
    • AkkaNET
  • 缓存

    • CsRedis
    • FreeRedis
    • EasyCaching
    • StackExchangeRedis
    • CacheCow
    • NCache
    • Memory
  • 注册发现

    • Consul
    • Nacos
    • Apollo
  • 网关

    • Ocelot
    • Kong
    • Traefik
      • 环境准备
      • 使用 Traefik
        • 1. 定义 Traefik 配置文件
        • 2. 配置 .NET 应用程序
        • 3. 启动 Traefik 和 .NET 应用程序
        • 4. 配置路由规则和中间件
        • 5. 测试服务
      • 结论
    • Zuul
  • GraphQL

    • GraphQLPlatform
    • GraphQLdotnet
  • 更多

    • NodaTime
    • FluentAssertions
    • Humanizer
    • 爬虫-AngleSharp
    • 邮件-MailKit
  • NET微服务
  • 网关
一个大西瓜
2023-04-25
目录

Traefik

开源地址

Github:https://github.com/traefik/traefik (opens new window)

Traefik 是一款流行的反向代理和负载均衡器,它支持多种后端服务(如 Docker、Kubernetes、Consul、Mesos 等)和多种协议(如 HTTP、WebSocket、TCP 等),并提供丰富的路由规则和中间件配置选项。

在 .NET 应用程序中使用 Traefik 可以实现更高效、更灵活、更可靠的服务管理和交互方式,本文将介绍如何在 .NET 中使用 Traefik,并提供详细的使用示例和技巧。

# 环境准备

在开始使用 Traefik 前,需要准备以下环境:

  • 安装 .NET Core 运行时和开发工具;
  • 安装 Docker 引擎(用于演示和测试);
  • 下载并安装 Traefik 二进制文件或 Docker 镜像。

可以通过以下命令行检查环境是否准备就绪:


$ dotnet --version
$ docker --version
$ docker run traefik version

如果以上命令都能正常运行,则说明环境准备就绪。

# 使用 Traefik

在 .NET 应用程序中使用 Traefik,需要遵循以下步骤:

  1. 定义 Traefik 配置文件;
  2. 配置 .NET 应用程序;
  3. 启动 Traefik 和 .NET 应用程序;
  4. 配置路由规则和中间件;
  5. 测试服务。

下面将逐一介绍这些步骤。

# 1. 定义 Traefik 配置文件

Traefik 的配置文件通常是一个 YAML 或 TOML 格式的文本文件,可以定义多个配置块(如 entryPoints、providers、middlewares、services、routes 等)和各种选项(如端口、TLS、日志、限流、加密等)。

以下是一个简单的 Traefik 配置示例,其中定义了一个 entryPoint(监听端口)和一个 provider(后端服务提供者):


entryPoints:
  web:
    address: ":80"

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false

在以上配置中,entryPoints 定义了一个名为 web 的监听端口,监听 TCP 协议的 80 端口。providers 定义了一个名为 docker 的后端服务提供者,使用 Docker 引擎的 Unix 套接字连接方式,只公开显式标记的容器服务。

更详细的 Traefik 配置选项可以参考官方文档。

# 2. 配置 .NET 应用程序

在 .NET 应用程序中使用 Traefik,需要添加以下 NuGet 包引用:

  • Microsoft.AspNetCore.HttpOverrides
  • Microsoft.AspNetCore.Routing.Abstractions
  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.CommandLine
  • Microsoft.Extensions.Configuration.EnvironmentVariables
  • Microsoft.Extensions.Configuration.Json

其中,Microsoft.AspNetCore.HttpOverrides 是一个 ASP.NET Core 中间件,可以帮助将 HTTP 请求中的一些信息(如请求头、主机名、协议等)转发给应用程序。Microsoft.AspNetCore.Routing.Abstractions 是 ASP.NET Core 中的路由模块,可以根据请求 URL 匹配对应的处理器和动作。

除了 NuGet 包引用外,还需要在 .NET 应用程序的启动代码中添加以下配置:


public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration(config =>
        {
            config.AddCommandLine(args);
            config.AddEnvironmentVariables();
            config.AddJsonFile("appsettings.json", optional: true);
        })
        .ConfigureServices(services =>
        {
            services.Configure<ForwardedHeadersOptions>(options =>
            {
                options.ForwardedHeaders =
                    ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
            });
        })
        .Configure(app =>
        {
            app.UseForwardedHeaders();
            app.UseRouting();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync("Hello from .NET!");
                });
            });
        });

在以上代码中,我们使用了 .NET Core 3.0 或以上版本的 WebHost.CreateDefaultBuilder() 方法创建了一个默认的 Web 主机构建器,并添加了一些额外的配置。其中,ConfigureAppConfiguration() 方法用于配置应用程序的配置选项,包括命令行参数、环境变量和 JSON 配置文件。ConfigureServices() 方法用于配置 ASP.NET Core 中的依赖注入服务,其中配置了一个 ForwardedHeadersOptions 实例,用于转发 HTTP 请求头。Configure() 方法则是应用程序的主要配置方法,其中添加了一个简单的处理器,将 HTTP GET 请求的根路径返回 "Hello from .NET!"。

# 3. 启动 Traefik 和 .NET 应用程序

在 Traefik 的配置文件中,可以通过定义服务(services)和路由(routes)来指定需要代理的后端服务和相应的路由规则。例如,以下配置定义了一个名为 dotnetapp 的服务,将请求转发到名为 webapp 的 Docker 容器服务,并将请求 URL 路径前缀为 /dotnetapp 的请求转发到该服务:


services:
  dotnetapp:
    loadBalancer:
      servers:
        - url: "http://webapp:80"

routes:
  dotnetapp:
    rule: "PathPrefix(`/dotnetapp`)"
    service: "dotnetapp"

在 Traefik 的配置文件和 .NET 应用程序的配置代码都准备好后,可以在终端中启动 Traefik 和 .NET 应用程序:


$ docker run -d \
    -p 80:80 \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /path/to/traefik/config/file.yml:/etc/traefik/traefik.yml \
    --name traefik \
    traefik:latest

$ dotnet run

以上命令启动了一个名为 traefik 的 Docker 容器,使用默认的 80 端口映射 Traefik 的监听端口,并挂载了 Docker 引擎的 Unix 套接字和 Traefik 配置文件。同时,还启动了 .NET 应用程序,监听本地的 5000 端口。

# 4. 配置路由规则和中间件

在 Traefik 的配置文件中,可以通过定义中间件(middlewares)和路由(routes)来对请求进行处理和路由。例如,以下配置定义了一个名为 dotnetapp 的中间件,将请求头中的 X-Forwarded-Proto 值设置为 https,以支持 SSL/TLS 协议:


middlewares:
  dotnetapp:
    headers:
      sslRedirect: true
      forceSTSHeader: true
      stsSeconds: 315360000
      stsIncludeSubdomains: true
      stsPreload: true
      customRequestHeaders:
        X-Forwarded-Proto: "https"

routes:
  dotnetapp:
    rule: "PathPrefix(`/dotnetapp`)"
    service: "dotnetapp"
    middlewares:
      - "dotnetapp"

在以上配置中,middlewares 定义了一个名为 dotnetapp 的中间件,使用 headers 中间件插件对请求头进行操作,将 X-Forwarded-Proto 值设置为 https。routes 中的 dotnetapp 路由规则定义了一个名为 dotnetapp 的服务,并将路由规则与该服务关联。其中,middlewares 选项将中间件 dotnetapp 应用于该路由规则。

Traefik 还支持多种其他中间件插件,如负载均衡、缓存、限流、重定向、压缩等,可以根据具体需求进行配置和使用。

# 5. 测试服务

在 Traefik 和 .NET 应用程序都启动成功后,可以通过浏览器或命令行工具进行测试,例如:


$ curl http://localhost/dotnetapp

以上命令将向 Traefik 发送一个 HTTP GET 请求,请求 URL 路径为 /dotnetapp,期望返回 .NET 应用程序的 "Hello from .NET!" 响应。Traefik 将根据路由规则和中间件配置将请求转发给 .NET 应用程序,并将请求头中的 X-Forwarded-Proto 值设置为 https。

除了上述测试方式外,还可以通过 Traefik 的 Web 界面查看服务和路由的状态和统计信息,例如:


$ open http://localhost:8080/dashboard/

以上命令将在默认情况下打开 Traefik 的 Web 界面,可以查看当前的服务和路由列表、后端服务的健康状况、请求和响应信息等。

# 结论

在 .NET 应用程序中使用 Traefik,可以实现更高效、更灵活、更可靠的服务管理和交互方式。通过定义 Traefik 的路由规则和中间件配置,可以轻松实现负载均衡、安全加密、请求重定向、响应压缩等功能,并通过 Traefik 的 Web 界面实时监控和管理服务状态和性能。

本文介绍了在 .NET 中使用 Traefik 的基本流程和示例代码,希望对读者有所帮助。如果想了解更多关于 Traefik 的信息和使用技巧,可以参考官方文档和社区论坛。

上次更新: 2023/04/26, 22:10:06
Kong
Zuul

← Kong Zuul→

Theme by Vdoing | Copyright © 2019-2024 一个大西瓜 | MIT License | 苏ICP备2023013501号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式