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.6K01
代码可运行
举报
运行总次数:1
代码可运行
之前文章有讲部署 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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Traefik 企业实战:路由规则篇
首先,当部署完后启动 Traefik 时,定义了入口点(端口号和对应的端口名称),然后 Kubernetes 集群外部就可以通过访问 Traefik 服务器地址和配置的入口点对 Traefik 服务进行访问,在访问时一般会带上 “域名” + “入口点端口”,然后 Traefik 会根据域名和入口点端口在 Traefik 路由规则表中进行匹配,如果匹配成功,则将流量发送到 Kubernetes 内部应用中与外界进行交互。这里面的域名与入口点与对应后台服务关联的规则,即是 Traefik 路由规则。Traefik 创建路由规则有多种方式:
用户1107783
2023/09/11
5600
Traefik 企业实战:路由规则篇
Kubernetes的负载均衡方案:MetalLB
在Kubernetes部署完成服务后,我们经常需要将服务开放给到外部用户访问 。如果是使用云平台(阿里云、腾讯云、AWS等)的话,这个需求处理起来非常简单,可以通过云平台的LoadBalancer来实现。
西岸Alex
2022/10/31
7K0
Kubernetes的负载均衡方案:MetalLB
Kubernetes 私有集群负载均衡器终极解决方案 MetalLB
私有云裸金属架构(这是相对云上环境来说,不是说无操作系统)上部署的 Kubernetes 集群,通常是无法使用 LoadBalancer 类型的 Service 的。因为 Kubernetes 本身没有为裸机群集提供网络负载均衡器的实现。
iMike
2020/05/24
7.9K1
Traefik 企业实战:TraefikService篇
traefik 的路由规则就可以实现 4 层和 7 层的基本负载均衡操作,使用 IngressRoute IngressRouteTCP IngressRouteUDP 资源即可。但是如果想要实现 加权轮询、流量复制 等高级操作,traefik抽象出了一个 TraefikService 资源。此时整体流量走向为:外部流量先通过 entryPoints 端口进入 traefik,然后由 IngressRoute/IngressRouteTCP/IngressRouteUDP 匹配后进入 TraefikService,在 TraefikService 这一层实现加权轮循和流量复制,最后将请求转发至kubernetes的service。
用户1107783
2023/09/11
4980
Traefik 企业实战:TraefikService篇
k8s loadbalancer与ingress实践
k8s可以通过三种方式将集群内服务暴露到外网,分别是NodePort、LoadBalancer、Ingress,其中NodePort作为基础通信形式我们在《k8s网络模型与集群通信》中进行了介绍,这里我们主要关注LoadBalancer和Ingress
你大哥
2022/01/10
1.9K0
k8s loadbalancer与ingress实践
关于 Kubernetes中Service使用Metallb实现LoadBalancer的一个Demo
NodePort还没有完全解决外部访问Service的所有问题,比如负载均衡问题,假如我们的集群中有10个Node,则此时最好有一个负载均衡器,外部的请求只需访问此负载均衡器的IP地址,由负载均衡器负责转发流量到后面某个Node的NodePort上。如图
山河已无恙
2023/03/02
6690
【Kubernetes系列】第6篇 Ingress controller - traefik组件介绍
为了能够让Ingress资源能够工作,在Kubernetes集群中必须至少有一个运行中的ingress controller组件。也就是说如果在kubernetes集群中没有一个ingress controller组件,只是定义了ingress资源,其实并不会实现http、https协议的请求转发、负载均衡等功能。常见的ingress controller组件如下:
HankerCloud
2019/10/11
6870
【Kubernetes系列】第6篇 Ingress controller - traefik组件介绍
附021.Traefik-ingress部署及使用
[root@master01 ingress]# helm repo add traefik https://containous.github.io/traefik-helm-chart
木二
2020/06/04
1.3K0
TKE之Traefik最佳实践
k8s的接入层有很多种,常见的7层负载均衡有nginx-ingress、traefik、kong等,还有每个云厂商为了对接自己的负载均衡产品所开发的控制器,tke集群现在默认是clb类型ingress,也支持组件安装nginx-ingress到集群内使用,其他类型的网关,需要自己在集群内部署才行,今天我们讲讲traefik在tke上的部署安装和一些使用实践。
聂伟星
2022/03/18
2.5K0
kubernetes1.22安装apisix
kubernetes环境(tke)1.20.6刚完成了升级,体验了一把Tke1.20.6升级Tke1.22.5留下的坑。traefik自定义crd各种的问题!算是比较早用traefik的用户了。大佬们都说traefik早期算是第一梯队。现在算是淘汰的网关了。纯go写的,GC语言写的网关后面都会成为三流网关。就也想顺路体验一下其他的网关,比如apisix。这貌似是基于nginx lua的网关。另外也关注张晋涛大佬各种博客文章很久了。也值得试一试。为什么 APISIX Ingress 是比 Traefik 更好的选择?
对你无可奈何
2023/07/27
6920
Metallb - 贫苦 K8S 用户的负载均衡支持
在私有网络上运行 Kubernetes,和御三家相比,对 LoadBalancer 类型的服务的支持应该是众多表面差异中最醒目的一个了。类型为 LoadBalancer 的服务在 Kubernetes 中并没有直接支持,NodePort 和 ExternalIP 方案让很多私有云用户成为了 K8S 世界中的二等公民。接下来介绍的 Metallb,就给私有 Kubernetes 用户带来了一个方便、可用(而且不太成熟)的软件解决方案。
崔秀龙
2019/07/23
4.6K0
traefik系列之一 | 简介、部署和配置
基于 centos7.9,docker-ce-20.10.18,kubelet-1.22.3-0, traefik-2.9.10
Amadeus
2023/04/27
4.3K0
traefik系列之一 | 简介、部署和配置
Kubernetes 中 traefik ingress 的使用
简单的说,ingress就是从kubernetes集群外访问集群的入口,将用户的URL请求转发到不同的service上。Ingress相当于nginx、apache等负载均衡反向代理服务器,其中还包括规则定义,即URL的路由信息。
kubernetes中文社区
2019/06/24
1.8K0
Kubernetes 中 traefik ingress 的使用
Kubernetes集群部署相关
free -h,显示内存和利用率 用swapon -s可以检查特定分区,逻辑卷或文件的交换,-s是摘要的含义,用它来获取交换的详细信息,以千字节为单位 或者使用top命令 vmstat,可以用该命令查看交换和交换信息,无法查看交换的总值
用户1413827
2023/11/28
7210
Kubernetes集群部署相关
Traefik1.7.17的部署使用
因为我这里是作为kubernetes服务的暴露,因此你得有一个kubernetes集群
聂伟星
2020/07/12
1.3K0
Kubernetes生态Ingress组件Traefik v2.0浅析
上一篇文章简单介绍了下Kubernetes生态的几个组件,这篇文章重点讲解下其中的Traefik组件,Traefik组件类似与Nginx,可以为整个集群做服务暴露、域名控制等等的作用,目前Traefik主要分为两个版本,v1.x与v2.x,这两个版本之间差距较大,让人感觉在使用不同的软件。本篇文章是以v2.x版本为基础来演示的,相关脚本代码都在Github仓库https://github.com/lateautumn4lin/KubernetesResearch里面,大家使用的时候可以切换目录到ClusterEcology/initTraefik下面。
云爬虫技术研究笔记
2020/02/19
8510
kubernetes-traefik(二十一)
使用nginx作为前端负载均衡,通过ingress controller不断的和kubernetes api交互,实时获取后端service,pod等的变化,然后动态更新nginx配置,并刷新使配置生效,达到服务发现的目的。
yuezhimi
2020/09/30
5090
通过 Traefik 使用 Kubernetes Service APIs 进行流量路由
前面我们已经介绍了 Kubernetes 社区内部为 Kubernetes 开发了一种改进的定义和管理入口流量的新接口,也就是新的 Kubernetes Service APIs。Traefik 在2.4 版本中引入了对 Service APIs 的初始支持。本文我们将演示如何通过 Traefik 来使用新的 Gateway、GatewayClass 和 HTTPRoute API 将请求路由到后端的服务 Pod。
我是阳明
2021/03/01
1.2K0
还不会Traefik?看这篇文章就够了!(文末送书)
暂且我们把Traefik当成和Nginx差不多的一类软件,待读完整篇文章,你就会对Traefik有不一样的认识。
没有故事的陈师傅
2021/11/12
4.4K0
还不会Traefik?看这篇文章就够了!(文末送书)
Kuberntes部署MetalLB负载均衡器
MetalLB是一个为基础 Kubernetes集群提供负载均衡实现的工具,使用标准路由协议。
小陈运维
2024/07/01
3080
Kuberntes部署MetalLB负载均衡器
相关推荐
Traefik 企业实战:路由规则篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验