在 Ubuntu 上使用 Traefik Proxy 为 Docker 容器设置反向代理

简介

Traefik(发音为"traffic")是一个开源的反向代理和负载均衡器。它为微服务架构提供了网络入口,特别是在动态、服务密集的环境中(如容器、微服务架构)。由于其设计灵活且易于实施,Traefik 成为了DevOps工程师和云原生应用开发者的热门选择🔥。

Traefik有什么用? 🛠️

  • 自动化的服务发现: Traefik 可以自动发现并管理网络路由配置。无论是在Kubernetes、Docker还是其他任何“服务发现”兼容的环境中,当你部署新服务时,Traefik 会自动检测并配置路由,无需任何人工干预👀。

  • 无缝的负载均衡: Traefik 支持多种负载均衡算法,包括轮询、IP哈希等。这样可以确保用户请求被平均且有效地分配到后端服务上,优化资源利用并提高响应速度💨。

  • 自动HTTPS: 利用Let’s Encrypt,Traefik 可以自动为你的服务生成和续订SSL证书,保证数据传输的安全🔒。

  • 可观测性和监控: Traefik 提供实时的监控和度量,支持与Prometheus, Grafana等工具集成。这让开发者和运维团队能够实时监控应用的状态和性能📊。

  • 中间件支持: Traefik 允许开发者使用中间件来修改请求和响应,实现诸如限流、认证、请求头修改等高级功能🔧。

image.png

接下来,我将开始介绍如何进行部署 Traefik Proxy。

准备工作

服务器准备

必要前提:

  • 一个充满求知欲的大脑。
  • 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。本文将以雨云为例进行演示。
  • 服务器上已安装 Docker 和 Docker Compose。
  • 拥有一个域名,并将其 A 记录指向服务器的公共 IP 地址。例如,app.example.com

我将以 雨云 为例,带大家创建一台自己的云服务器,以便尝试本篇文章的内容。

注册链接: https://rainyun.ivwv.site

创建雨云服务器

以下步骤仅供参考,请根据实际需求选择配置。

点击 云产品云服务器立即购买

https://img-blog.csdnimg.cn/img_convert/6d1cfac48988a60f6430bf29b897ae00.png

选择距离你较近的区域,以保证低延迟。

https://img-blog.csdnimg.cn/img_convert/4c16271f125adea69da6ed9e7b2a4226.png

按照自己需求选择配置。

https://img-blog.csdnimg.cn/img_convert/fa69fed3142baf010a15ed36163d2215.png

选择 Ubuntu 22.04 版本,勾选预装 Docker。

https://img-blog.csdnimg.cn/img_convert/f6611351f576daf28d27eee3938aa3f5.png

最后点击 立即购买,并按照提示进行购买。购买后等待机器部署完毕,点击购买的服务器,进入管理面板,找到远程连接相关信息。

https://img-blog.csdnimg.cn/img_convert/5e84cffc9a748ee6080badd4f4a27091.png

https://img-blog.csdnimg.cn/img_convert/414570cd3da48d4cc4bf51489992000b.png

使用 PowerShell 进行远程连接。

https://img-blog.csdnimg.cn/img_convert/c8afbeb764459a37a8451dd2ed8eeff1.png

输入 ssh root@你的服务器IP 例如 ssh root@154.9.227.239 回车后,首次需要输入 yes,再次回车后即可登录服务器。

https://img-blog.csdnimg.cn/img_convert/16bf1d681ae7fd3663ceb797b087d39e.png

到此为止,我们的云服务器就创建好了。

开始部署

设置防火墙规则

确保防火墙允许 Traefik 路由传入的 HTTP 和 HTTPS 连接请求。

允许端口 80 上的 HTTP 连接:

sudo ufw allow 80/tcp

允许端口 443 上的 HTTPS 连接:

sudo ufw allow 443/tcp

查看 UFW 状态并验证新连接规则是否处于活动状态:

sudo ufw status

使用 Docker Compose 部署 Traefik

Traefik 使用 Docker 标签自动发现和路由流量到容器化应用程序。Docker Compose 允许你定义和运行带有多个标签的多容器应用程序,以使用 Traefik 定义路由路径。

创建一个新的 docker-compose.yml 文件:

sudo nano docker-compose.yml

添加以下配置到文件中:

services:traefik:image: "traefik:latest"container_name: "traefik"command:- "--log.level=DEBUG"- "--api.insecure=true"- "--providers.docker=true"- "--entryPoints.web.address=:80"ports:- "80:80"- "8080:8080"volumes:- "/var/run/docker.sock:/var/run/docker.sock"

以上配置创建一个使用 Traefik 镜像的新容器化应用程序,该应用程序接受 HTTP 端口 80 上的传入流量,并在端口 8080 上公开 Web 管理控制面板。

在后台启动 Traefik:

docker compose up -d

查看所有正在运行的 Docker 容器,并验证 Traefik 容器状态是否为 up

docker compose ps

使用 Web 浏览器访问服务器的公共 IP 地址的端口 8080,例如 http://<服务器 IP>:8080,即可访问 Traefik 控制面板。

image.png

导航到 Providers (提供程序) 部分并验证 Docker 是否可用。

image.png

使用 Docker Compose 配置 Traefik Proxy 作为反向代理

现在 Traefik 正在运行,并配置为处理端口 80 上的 HTTP 连接请求。接下来,创建一个使用 Apache 容器镜像的新示例 Web 服务器应用程序,以与 Traefik 集成并使用域名接受连接请求。

打开 docker-compose.yml 文件:

nano docker-compose.yml

将以下配置添加到文件中。将 app.example.com 替换为你的实际域名:

apache:image: "httpd:latest"container_name: "apache"labels:- traefik.enable=true- "traefik.http.routers.apache.rule=Host(`app.example.com`)"- traefik.http.routers.apache.entrypoints=web

保存并关闭文件。

上述配置使用 Apache 容器镜像创建新的 Web 服务器应用程序,并接受 app.example.com 域和 Web 入口点的传入连接请求。在配置中:

  • apache:创建新的 apache 服务。
    • image: "httpd:latest":使用 Apache httpd 容器镜像部署 apache 服务。
    • labels:设置 Docker 标签以分配 apache 服务,使 Traefik 能够将流量动态路由到应用程序。
      • traefik.enable=true:使 Traefik 能够将流量转发到 apache 服务。
      • traefik.http.routers.apache.rule=Host(app.example.com) :设置 Traefik 用于侦听传入连接请求的域。如果您不想指定域,请指定 apache.localhost 而不是 apache.rule=Host 以使用 localhost。
      • traefik.http.routers.apache.entrypoints=web :设置 Traefik 用于将传入请求路由到 apache 服务的 Web 入口点。

修改后的 docker-compose.yml 文件应如下所示。

services:traefik:image: "traefik:latest"container_name: "traefik"command:- "--log.level=DEBUG"- "--api.insecure=true"- "--providers.docker=true"- "--entryPoints.web.address=:80"ports:- "80:80"- "8080:8080"volumes:- "/var/run/docker.sock:/var/run/docker.sock"apache:image: "httpd:latest"container_name: "apache"labels:- traefik.enable=true- traefik.http.routers.apache.rule=Host(`app.example.com`)- traefik.http.routers.apache.entrypoints=web

在后台启动 apache 服务:

docker compose up -d

使用 HTTP 访问你的域名,例如 http://app.example.com,验证是否显示 Apache 默认页面。

访问 Traefik 控制面板,导航到 HTTP 选项卡,并验证 apache 服务路由是否可用。

image.png

使用 Traefik 设置自动 HTTPS

Traefik 使用证书解析器从自动证书管理环境 (ACME) 提供程序生成和更新受信任的 SSL 证书。Traefik 初始化 ACME 质询以验证你的域名,并将生成的证书存储在 acme.json 文件中。

备份原始的 docker-compose.yml 文件:

mv docker-compose.yml http-docker-compose.yml

创建一个新的 docker-compose.yml 文件,并添加以下配置。将 app.example.com 替换为你的域名,将 hello@example.com 替换为你的有效电子邮件地址:

services:traefik:image: "traefik:latest"container_name: "traefik"command:- "--log.level=DEBUG"- "--api.insecure=true"- "--providers.docker=true"- "--entryPoints.apachesecure.address=:443"- "--certificatesResolvers.apacheresolver.acme.tlsChallenge=true"- "--certificatesResolvers.apacheresolver.acme.email=hello@example.com"- "--certificatesResolvers.apacheresolver.acme.storage=/letsencrypt/acme.json"ports:- "443:443"- "8080:8080"volumes:- "/var/run/docker.sock:/var/run/docker.sock"- "./letsencrypt:/letsencrypt"apache:image: "httpd:latest"container_name: "apache"labels:- traefik.enable=true- traefik.http.routers.apache.rule=Host(`app.example.com`)- traefik.http.routers.apache.entrypoints=apachesecure- traefik.http.routers.apache.tls=true- traefik.http.routers.apache.tls.certresolver=apacheresolver

上述配置使 Traefik 能够仅使用端口 443 上的 apachesecure 入口点接受安全 HTTPS 连接请求。在 traefik 服务配置中:

  • -entryPoints.apachesecure.address=:443 :使用 apachesecure 入口点在端口 443 上启用 HTTPS 连接。
  • -certificatesResolvers.apacheresolver.acme.tlsChallenge=true :创建新的 apacheresolver 证书解析程序,并使用 ACME TLS-ALPN-01 质询作为 TLS 质询来生成新的 SSL 证书。Traefik 默认使用 Let’s Encrypt ACME。
  • -certificatesResolvers.apacheresolver.acme.email=hello@example.com :设置 ACME 质询电子邮件地址 。
  • -certificatesResolvers.apacheresolver.acme.storage=/letsencrypt/acme.json :指定存储 ACME 配置的路径,以便在容器重启之间重复使用。

apache 服务配置中:

  • traefik.http.routers.apache.entrypoints=apachesecure :创建新的 apachesecure 入口点以处理连接请求。
  • traefik.http.routers.apache.tls=true :启用与服务的安全 TLS 连接。
  • traefik.http.routers.apache.tls.certresolver=apacheresolver :创建新的 apacheresolver 证书解析程序以生成和管理 SSL 证书。

应用 Docker Compose 配置:

docker compose up traefik apache -d

使用 HTTPS 访问你的域名,例如 https://app.example.com,验证连接是否安全以及是否显示默认网页。

访问 Traefik 控制面板,验证端口 443 上的 apachesecure 入口点是否可用,以及 apache 服务上的 TLS 是否处于活动状态。

image.png

image.png

使用 Docker CLI 部署 Traefik

除了 Docker Compose,你还可以使用 Docker CLI 部署 Traefik。

创建 traefik.yml 文件,并添加以下配置:

sudo nano traefik.yml
entryPoints:web:address: ":80"api:dashboard: trueinsecure: truelog:level: debugproviders:docker:exposedByDefault: falseendpoint: "unix:///var/run/docker.sock"

在上述配置中:

  • entrypoint:创建一个新的 Web 入口点,用于侦听 HTTP 端口 80 上的连接。
  • api:开启 Traefik 仪表盘。
  • log:启用调试级别日志记录以包含警告和错误日志。
  • providers:将 Docker 设置为提供者,并使用 Docker 套接字进行连接。
  • 使用 Docker CLI 部署 Traefik:
docker run -d -p 8080:8080 -p 80:80 \\-v /var/run/docker.sock:/var/run/docker.sock \\-v $PWD/traefik.yml:/traefik.yml \\traefik:v3.1

部署一个 Nginx 容器并配置 Traefik 标签:

docker run -d \\--label "traefik.enable=true" \\--label 'traefik.http.routers.nginx.rule=Host(`app.example.com`)' \\--label "traefik.http.routers.nginx.entrypoints=web" \\nginx

使用 HTTP 访问域名,并通过 Traefik 控制面板验证路由。

image.png

使用 Traefik 启用自动 HTTPS

备份 traefik.yml 文件, 创建新的 traefik.yml 文件

mv traefik.yml old-traefik.yml
sudo nano traefik.yml

并添加以下配置, 将 hello@example.com 替换为你的有效电子邮件地址:

entryPoints:websecure:address: ":443"api:dashboard: trueinsecure: truelog:level: debugproviders:docker:exposedByDefault: falseendpoint: "unix:///var/run/docker.sock"certificatesResolvers:nginxresolver:acme:email: hello@example.comstorage: /letsencrypt/acme.jsontlsChallenge: true

在上述配置中:

  • websecure:创建新的入口点。
  • nginxresolver:设置要与 Let’s Encrypt 一起使用的证书解析程序名称作为 ACME。
  • /letsencrypt/acme.json:使用主机数据目录中的 acme.json 文件,如果不可用,则创建 Let’s Encrypt 目录。

停止 Traefik 和 Nginx 容器。

docker stop <traefik-container-id> -f
docker stop <nginx-container-id> -f

重新部署 Traefik,映射 HTTPS 端口 443,并挂载 letsencrypt 目录:

docker run -d -p 8080:8080 -p 443:443 \\-v /var/run/docker.sock:/var/run/docker.sock \\-v $PWD/traefik.yml:/traefik.yml \\-v $PWD/letsencrypt:/letsencrypt \\traefik:v3.1

重新部署 Nginx 容器,并配置 HTTPS 相关的标签:

docker run -d \\--label "traefik.enable=true" \\--label 'traefik.http.routers.nginx.rule=Host(`app.example.com`)' \\--label "traefik.http.routers.nginx.entrypoints=websecure" \\--label "traefik.http.routers.nginx.tls.certresolver=nginxresolver" \\nginx

使用 HTTPS 访问你的域名,并验证是否配置成功。

https://app.example.com

image.png

相关链接
雨云 - 新一代云服务提供商: https://www.rainyun.com/NTEzMTM1_?s=blog
面试鸭:https://mianshiya.com/?shareCode=sq29yv
我的博客:https://blog.ivwv.site

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/61711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有关博客博客系统的测试报告 --- 初次进行项目测试篇

文章目录 前言一、博客系统的项目背景二、博客系统的项目简介1.后端功能1.1 用户管理1.2 博客管理1.3 权限管理 2.前端功能2.1 用户界面 测试计划测试工具、环境设计的测试动作功能测试访问博客登录页面博客首页测试博客详情页博客编辑页 自动化测试自动化测试用例自动化测试脚…

Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持

作者&#xff1a;来自 Elastic Saikat Sarkar 使用 Elasticsearch 向量数据库构建搜索 AI 体验时如何使用 IBM watsonx™ Slate 文本嵌入。 Elastic 很高兴地宣布&#xff0c;通过集成 IBM watsonx™ Slate 嵌入模型&#xff0c;我们的开放推理 API 功能得以扩展&#xff0c;这…

flume-将日志采集到hdfs

看到hdfs大家应该做什么&#xff1f; 是的你应该去把集群打开&#xff0c; cd /export/servers/hadoop/sbin 启动集群 ./start-all.sh 在虚拟机hadoop02和hadoop03上的conf目录下配置相同的日志采集方案&#xff0c;‘ cd /export/servers/flume/conf 切换完成之后&#…

已解决wordpress提示正在执行例行维护,请一分钟后回来

今天打开网站时提示“正在执行例行维护,请一分钟后回来”&#xff0c;一分钟后还这样&#xff0c;刷新也没用&#xff0c;这究竟是怎么回事了&#xff1f; 问题原因 这是WordPress在更新&#xff0c;wordpress在升级程序、主题、插件时&#xff0c;都会先切换到维护模式&…

[C++]:IO流

1. IO 流 1.1 流的概念 在C中&#xff0c;存在一种被称为“流”的概念&#xff0c;它描述的是信息流动的过程&#xff0c;具体来说就是信息从外部输入设备&#xff08;比如常见的键盘&#xff09;传输到计算机内部&#xff08;像内存区域&#xff09;&#xff0c;以及信息从内…

趋势洞察|AI 能否带动裸金属 K8s 强势崛起?

随着容器技术的不断成熟&#xff0c;不少企业在开展私有化容器平台建设时&#xff0c;首要考虑的问题就是容器的部署环境——是采用虚拟机还是物理机运行容器&#xff1f;在往期“虚拟化 vs. 裸金属*”系列文章中&#xff0c;我们分别对比了容器部署在虚拟化平台和物理机上的架…

多摩川编码器协议及单片机使用

参考&#xff1a; https://blog.csdn.net/qq_28149763/article/details/132718177 https://mp.weixin.qq.com/s/H4XoR1LZSMH6AxsjZuOw6g 1、多摩川编码器协议 多摩川数据通讯是基于485 硬件接口标准NRZ 协议&#xff0c;通讯波特率为2.5Mbps 的串行通讯&#xff0c;采用差分两…

力扣刷题--21.合并两个有序链表

I am the best &#xff01;&#xff01;&#xff01; 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2…

Altium Designer学习笔记 6-10 异性元件库创建_原理图绘制

基于Altium Designer 23学习版&#xff0c;四层板智能小车PCB 更多AD学习笔记&#xff1a;Altium Designer学习笔记 1-5 工程创建_元件库创建 目录 6、光耦及二极管元件库模型创建 7、元件库模型的调用 二、原理图绘制及编译检查 8、元件的放置 9、器件的复制及对齐 10、…

视频流媒体播放器EasyPlayer.js H.265流媒体播放器当container窗口发生变化的时候,播放器如何自适应

流媒体播放器的核心技术及发展趋势展现了其在未来数字生活中的无限潜力。现今流媒体播放器将继续引领数字娱乐的新潮流&#xff0c;为用户提供更加丰富多样的内容体验。 流媒体播放器负责解码和呈现内容&#xff0c;常见的播放器包括VLC和HTML5播放器等。流媒体技术的应用场景广…

Windows系统使用全功能的跨平台开源音乐服务器Navidrome搭建在线音乐库

文章目录 前言1. 安装Docker2. Docker镜像源添加方法3. 创建并启动Navidrome容器4. 公网远程访问本地Navidrome4.1 内网穿透工具安装4.2 创建远程连接公网地址4.3 使用固定公网地址远程访问 前言 在数字时代&#xff0c;拥有一个个性化、便捷的音乐库成为了许多人的需求。本文…

在Excel中处理不规范的日期格式数据并判断格式是否正确

有一个Excel表&#xff0c;录入的日期格式很混乱&#xff0c;有些看着差不多&#xff0c;但实际多一个空格少一个字符很难发现&#xff0c;希望的理想格式是 1980-01-01&#xff0c;10位&#xff0c;即&#xff1a;“YYYY-mm-dd”&#xff0c;实际上数据表中这样的格式都有 19…

二进制 分析工具:Radare2、r2frida、Binutils、file、string、as、nm、ldd、objdump、readelf、strip

1、二进制 分析工具 工欲善其事&#xff0c;必先利其器&#xff0c;在二进制安全的学习中&#xff0c;​使用工具尤为重要。遇到一个不熟悉的文件时&#xff0c; 首先要确定 "这是什么类型的文件"&#xff0c;回答这个问题的首要原则是&#xff0c;绝不要根据文件的扩…

大数运算(加减乘除和输入、输出模块)

为什么会有大数呢&#xff1f;因为long long通常为64位范围约为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807&#xff0c;最多也就19位&#xff0c;那么超过19位的如何计算呢&#xff1f;这就引申出来大数了。 本博客适合思考过这道题&#xff0c;但是没做出来或…

Kafka-副本分配策略

一、上下文 《Kafka-创建topic源码》我们大致分析了topic创建的流程&#xff0c;为了保持它的完整性和清晰度。细节并没有展开分析。下面我们就来分析下副本的分配策略以及副本中的leader角色的确定逻辑。当有了副本分配策略&#xff0c;才会得到分区对应的broker&#xff0c;…

Move语言中的代币合约:设计和实现指南

系列文章目录 Task1&#xff1a;hello move&#x1f6aa; Task2&#xff1a;move coin&#x1f6aa; Task3&#xff1a;move nft&#x1f6aa; 更多精彩内容&#xff0c;敬请期待&#xff01;✌️ 文章目录 系列文章目录前言什么是 Sui 链&#xff1f;什么是 Move 编程语言&a…

精酿啤酒厂建设攻略——关键步骤与注意点

建设一家精酿啤酒厂&#xff0c;每一步都至关重要。在这里&#xff0c;小编将为您精心梳理建设精酿啤酒厂的详细步骤和关键注意点&#xff0c;助您在啤酒市场的蓝海中乘风破浪。从投资预算的精确规划&#xff0c;到市场渠道的精心布局&#xff0c;从产品特色的精准定位&#xf…

什么是UGFC?模块电脑(核心板)规范标准简介四

1. 概念 UGFC是Unified Gold Finger Core Board的缩写&#xff08;意指&#xff1a;统一接口定义金手指核心板&#xff09;&#xff0c;为武汉万象奥科电子有限公司基于企业标准定义的一种针对嵌入式、低功耗、通用型的小型计算机模块标准&#xff0c;采用204Pin金手指连接器…

数据科学与SQL:组距分组分析 | 区间分布问题

目录 0 问题描述 1 数据准备 2 问题分析 3 小结 0 问题描述 绝对值分布分析也可以理解为组距分组分析。对于某个指标而言&#xff0c;一个记录对应的指标值的绝对值&#xff0c;肯定落在所有指标值的绝对值的最小值和最大值构成的区间内&#xff0c;根据一定的算法&#x…

量子感知机

神经网络类似于人类大脑&#xff0c;是模拟生物神经网络进行信息处理的一种数学模型。它能解决分类、回归等问题&#xff0c;是机器学习的重要组成部分。量子神经网络是将量子理论与神经网络相结合而产生的一种新型计算模式。1995年美国路易斯安那州立大学KAK教授首次提出了量子…