Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Traefik 企业实战:部署生产级Traefik篇

Traefik 企业实战:部署生产级Traefik篇

作者头像
用户1107783
发布于 2023-09-11 03:15:47
发布于 2023-09-11 03:15:47
1.6K00
代码可运行
举报
运行总次数:0
代码可运行
之前文章有讲部署 Ingress企业实战:部署高可靠

Traefik 简介

Traefik 是一款开源的边缘路由器,它可以让发布服务变得轻松有趣。它代表您的系统接收请求,并找出负责处理这些请求的组件。与众不同之处在于,除了它的许多特性之外,它还可以自动为您的服务发现正确的配置。当 Traefik 检查您的基础设施时,它会发现相关信息,并发现哪个服务为哪个请求提供服务。Traefik 与每个主要的集群技术都是原生兼容的,比如 Kubernetes、Docker、Docker Swarm、AWS、Mesos、Marathon 等等;并且可以同时处理多个。(它甚至适用于运行在裸机上的遗留软件。) 使用 Traefik,不需要维护和同步单独的配置文件:所有事情都是实时自动发生的(没有重启,没有连接中断)。使用 Traefik,只需要花费时间开发和部署新功能到您的系统,而不是配置和维护其工作状态。项目地址:https://github.com/traefik/traefik官网文档:https://doc.traefik.io/traefik/

流量示意图

以下为官方示意图

概念

从上面图得知,当请求Traefik时,请求首先到entrypoints,然后分析传入的请求,查看他们是否与定义的Routers匹配。如果匹配,则会通过一系列middlewares处理,再到traefikServices上做流量转发,最后请求到kubernetes的services上。Traefik 基于入口点、路由器、中间件和服务的概念:

  • Providers:基础组件,监听路由信息变化,更新路由,类似修改完nginx配置,reload服务
  • Entrypoints:网络的入口点,监听传入的流量,类似nginx的配置文件listen指定监听端口
  • Routers:分析请求(host,path,headers,SSL等),匹配规则,类似nginx的配置文件server_name+location
  • Middlewares:中间件,用来修改请求或者根据请求来做出判断,类似nginx的配置文件,location配置段中添加的缓存、压缩、请求头等配置
  • Service:将请求转发给应用,负责配置如何最终将处理传入请求的实际服务,Traefik的Service介于Middlewares与KubernetesService之间,可以实现加权负载、流量复制等功能,类似于nginx配置中http配置段中的upstream

与 Nginx-Ingress对比

nginx-ingress:

使用nginx作为前端负载均衡,通过ingress controller不断的和kubernetes api交互,实时获取后端service,pod等的变化,然后动态更新nginx配置,并刷新使配置生效,达到服务发现的目的。

traefik:traefik本身设计的就能够实时跟kubernetes api交互,感知后端service,pod等的变化,自动更新配置并重载。

traefik优点

  • 不需要安装其他依赖,使用 GO 语言编译可执行文件
  • 支持多种后台,如 Docker, Swarm mode, Kubernetes, Marathon, Consul, Etcd, Rancher, Amazon ECS 等等
  • 支持 REST API
  • 配置文件热重载,可自动监听配置改动、发现新服务,并自动更新无需人工重启
  • 支持熔断、限流功能
  • 支持轮训、负载均衡
  • 提供简洁的 UI 界面
  • 支持 Websocket, HTTP/2, GRPC
  • 自动更新 HTTPS 证书
  • 支持高可用集群模式

安装 Traefik

官方提供以下几种方式来安装Traefik:

  • 使用官方的Docker镜像
  • 使用Helm安装
  • 使用二进制安装
  • 从源代码编译二进制文件

本篇将使用 Helm 来安装 Traefik。确保满足以下要求:

  • Kubernetes 1.16+
  • Helm version 3.9+

环境说明:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# kubectl get nodes
NAME                    STATUS   ROLES                  AGE    VERSION
localhost.localdomain   Ready    control-plane,master   1d     v1.22.10
 
[root@localhost ~]# helm version    
version.BuildInfo{Version:"v3.11.3", GitCommit:"323249351482b3bbfc9f5004f65d400aa70f9ae7", GitTreeState:"clean", GoVersion:"go1.20.3"}
[root@localhost ~]#

MetalLB负载均衡器部署

为了实现在本地集群中能够使用服务类型为LoadBalancer的服务,我们将部署metallb来实现,至于metallb的实现原理,本章不会详细讲解,有兴趣的童鞋可以自行研究 提前安装metallb服务,使traefik svc可以使用LoadBalancer的服务

Helm安装 metallb

参考官网:https://metallb.universe.tf/installation/

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# kubectl create ns metallb-system
 
[root@localhost ~]# helm repo add metallb https://metallb.github.io/metallb
"metallb" has been added to your repositories
 
[root@localhost ~]# helm install -n metallb-system metallb metallb/metallb
NAME: metallb
LAST DEPLOYED: Mon Aug 21 16:51:37 2023
NAMESPACE: metallb-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
MetalLB is now running in the cluster.
 
Now you can configure it via its CRs. Please refer to the metallb official docs
on how to use the CRs.

查看pod

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# kubectl get pod -n metallb-system
NAME                                  READY   STATUS    RESTARTS       AGE
metallb-controller-77bbffbc7b-jr78f   1/1     Running   1 (1d ago)     1d
metallb-speaker-7pqhj                 1/1     Running   1 (1d ago)     1d

Layer 2 模式配置

配置ip池

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: default
  namespace: metallb-system
spec:
  addresses:
  - 192.168.36.139.139-192.168.36.200  # 手动配置IP范围
  autoAssign: true
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: default
  namespace: metallb-system
spec:
  ipAddressPools:
  - default

创建测试应用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - name: http
          containerPort: 80
 
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

查看服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# kubectl get service
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE
kubernetes   ClusterIP      10.96.0.1      <none>           443/TCP        1d
nginx        LoadBalancer  10.102.129.137 192.168.36.139   80:31274/TCP   1d
 
# 从集群外访问该IP地址:192.168.36.139

访问成功即可表示部署成功

image.png

Helm部署Traefik

添加traefik仓库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 将 Traefik Labs 图表存储库添加到 Helm:
helm repo add traefik https://traefik.github.io/charts
 
# 您可以通过运行以下命令来更新图表存储库:
helm repo update

安装部署

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 使用helm命令行安装它:
kubectl create ns traefik
helm install -n traefik traefik traefik/traefik

部署效果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# kubectl get all  -n  traefik   
NAME                           READY   STATUS    RESTARTS   AGE
pod/traefik-65944f8d5f-k5bfl   1/1     Running   0          1d
 
NAME              TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                      AGE
service/traefik   LoadBalancer   10.110.60.107   192.168.36.140   80:32301/TCP,443:31378/TCP   1d
 
NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/traefik   1/1     1            1           1d
 
NAME                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/traefik-65944f8d5f   1         1         1       1d

Traefik Dashboard

安装好traefik之后,我们使用 Traefik 自带的 CRD 创建一个ingress规则访问dashboard

CRD方式路由

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# traefik-dashboard.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: dashboard
  namespace: traefik
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`traefik.lc`)
      kind: Rule
      services:
        - name: api@internal
          kind: TraefikService
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# kubectl apply -f traefik-dashboard.yaml
ingressroute.traefik.containo.us/dashboard created

本集群部署了 MetalLB 负载均衡器,使用LoadBalancer暴露了了traefik service,可直接拿EXTERNAL-IP 地址访问

添加本地hosts

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
192.168.36.140 traefik.lc

访问 http://traefik.lc/ 即可部署成功

总结

本文介绍了Treafik以及与Nginx INgress的对比,并一步一步讲解了部署的过程,下一章将讲解Treafik更多企业级实战,请敬请期待!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生运维圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
HTML第五课——css盒子模型
从今天开始,恢复更新,谢谢大家的关注和赞赏! ---- 直接上代码: <!doctype html> <html> <head> <meta charset="utf-8" /> <title>css盒子</title> <meta name="keywords" content="关键词,关键词" /> <meta name="description" content="" /> <link rel="styleshe
孟船长
2018/06/26
1.7K0
【CSS】714- 你所不知道的 CSS 负值技巧与细节
来源 | https://juejin.im/post/6844903908440014861
pingan8787
2020/09/22
6870
【CSS】714- 你所不知道的 CSS 负值技巧与细节
浅谈 CSS 的用法
   为了让网页元素的样式更加丰富,也为了让网页的内容和样式能拆分开,CSS 由此诞生,CSS 是 Cascading Style Sheets 的首字母缩写,意思是层叠样式表。有了 CSS,html 中大部分表现样式的标签就废弃不用了,html 只负责文档的结构和内容,表现形式完全交给 CSS,html 文档变得更加简洁。
Demo_Null
2020/09/28
1.6K0
浅谈 CSS 的用法
用deepseek优化代码|如何优化 CSS 工具类的实现
在前端开发中,我经常需要为元素设置不同的 padding 或 margin 值。最初,我通过手动编写 CSS 类来实现这一需求。然而,随着项目规模的扩大,这种方式不仅效率低下,还容易出错。为了提高开发效率,我决定优化这一过程,并向 DeepSeek 寻求帮助,探索如何通过 CSS 预处理器(如 Sass 或 Less)动态生成工具类。
肥晨
2025/03/20
3730
用deepseek优化代码|如何优化 CSS 工具类的实现
盒子模型:padding
(div)标签与里面的标签的&#x5185;&#x8FB9;&#x8DDD;&#x79BB;
鹤川
2023/04/27
4290
勇闯44关深入浅出CSS基础之第一篇
欢迎回来三钻的FCC前端教程,上一篇文章我们通过28关学会了HTML与HTML5网页开发基础。这一期我们一起攻破前端第二大知识点《CSS基础入门》。因为这一课一共有44关,我把文章分成两期更新。敬请期待!
三钻
2020/10/29
1.3K0
勇闯44关深入浅出CSS基础之第一篇
抗击疫情静态HTML网页作业作品 大学生抗疫感动专题页设计制作成品 简单DIV CSS布局网站
✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (1000套) 】 🧡 程序员有趣的告白方式:【💌HTML七夕情人节表白网页制作 (110套) 】 🌎超炫酷的Echarts大屏可视化源码:【🔰 echarts大屏展示大数据平台可视化(150套) 】 🎁 免费且实用的WEB前端学习指南: 【📂web前端零基础到高级学习视频教程 120G干货分享】 🥇 关于作者: 历任研发工程师,
IT司马青衫
2022/08/19
7100
抗击疫情静态HTML网页作业作品 大学生抗疫感动专题页设计制作成品 简单DIV CSS布局网站
CSS基础——盒子模型
所谓的盒子模型就是把HTML页面的元素看作一个矩形盒子,矩形盒子是由内容(content)、内边距(padding)、边框(border)、外边距(margin)四部分组成。
落雨
2022/07/20
6960
CSS学习笔记(基础篇)
CSS 指层叠样式表 (Cascading Style Sheets)(级联样式表)
Daotin
2018/08/31
4.8K0
CSS学习笔记(基础篇)
前端学习(12)~css学习(六):盒模型详解
但是,图片、表单元素一律看作是文本,它们并不是盒子。这个很好理解,比如说,一张图片里并不能放东西,它自己就是自己的内容。
Vincent-yuan
2020/03/19
8670
基于Html+Css+javascript的游戏网页制作(游戏主题)超级英雄排行榜
✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (1000套) 】 🧡 程序员有趣的告白方式:【💌HTML七夕情人节表白网页制作 (110套) 】 🌎超炫酷的Echarts大屏可视化源码:【🔰 echarts大屏展示大数据平台可视化(150套) 】 🎁 免费且实用的WEB前端学习指南: 【📂web前端零基础到高级学习视频教程 120G干货分享】 🥇 关于作者: 历任研发工程师,技术
IT司马青衫
2022/08/16
1K0
基于Html+Css+javascript的游戏网页制作(游戏主题)超级英雄排行榜
CSS border详解+padding详解+margin详解
特点: 记住哈,一个所谓的边框必须有三样. 第一;这个边框是什么颜色的. 第二:这个边框的样式是什么样的? 第三;这个边框有多少的厚度.
贵哥的编程之路
2020/11/03
9830
CSS border详解+padding详解+margin详解
CSS学习笔记
             选择器 { 属性名:属性值; 属性名:属性值; ……  }
泰斗贤若如
2019/06/18
9840
CSS基础
CSS 语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明。 1 2 3 4 5 6 7 8 9 '''         selector {                   property: value;                   property: value;              ...  property: value                     }           ''' 例如: 1 h1 {color:red; font-size:14px
用户1214487
2018/01/24
2.2K0
CSS基础
CSS基础——css 属性
我们知道 css 我们知道 css 作用是美化 HTML 网页和控制页面布局的,接下来我们来学习一下经常使用一些样式属性。
落雨
2022/07/20
1.7K0
利用css 设计markdown 主题
Markdown 入门 :文章目录生成、合并单元格、文章快速插入链接(使用剪切板的链接插到选中文字)【修订】
公众号iOS逆向
2021/07/29
5510
CSS学习
在很多方面,ID选择器都类似于类选择器,但也有一些重要的区别: 1、为标签设置id=”id名称”,而不是class=”类名称”。 2、id选择符的前面是#号,而不是英文圆点(.)。
Cloud-Cloudys
2020/07/06
1.3K0
你是否彻底了解margin属性?
写css,你少不了与margin打交道。你真的了解margin吗?你知道margin有什么特性吗?你知道什么是垂直外边距合并?margin在块元素、内联元素中的区别?什么时候该用padding而不是margin?你知道负margin吗?你知道负margin在实际工作中的用途吗?常见的浏览器下margin出现的bug有哪些?……
Twcat_tree
2022/11/30
1K0
【前端基础篇】CSS基础速通万字介绍(下篇)
以及在看本篇之前需要有HTML的基础,详情请见【前端基础篇】HTML零基础速通,同时还有【前端基础篇】CSS基础速通万字介绍(上篇)
半截诗
2024/10/09
3190
【前端基础篇】CSS基础速通万字介绍(下篇)
【CSS】CSS 总结 ⑤ ( CSS 盒子边框 | CSS 盒子模型内边距 | CSS 盒子模型外边距 | CSS 盒子模型圆角边框 | CSS 盒子模型阴影 ) ★
HTML 的 一个布局 可以看做一个 矩形的 盒子模型 , 该 盒子模型 是一个用于 容纳 标签元素 的容器 ;
韩曙亮
2024/03/12
5850
【CSS】CSS 总结 ⑤ ( CSS 盒子边框 | CSS 盒子模型内边距 | CSS 盒子模型外边距 | CSS 盒子模型圆角边框 | CSS 盒子模型阴影 ) ★
相关推荐
HTML第五课——css盒子模型
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验