首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Traefik 企业实战:部署生产级Traefik篇

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

作者头像
用户1107783
发布于 2023-09-11 03:15:47
发布于 2023-09-11 03:15:47
1.7K01
代码可运行
举报
运行总次数: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
6020
Traefik 企业实战:路由规则篇
详解kubernetes的企业级监控(付文档)
• request(需求资源):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod • limit(资源限额):即运行Pod期间,可能内存使用量会增加,可以在yaml文件中设定最多能使用多少内存配置资源限额
IT运维技术圈
2022/10/24
1.3K0
Kubernetes 私有集群负载均衡器终极解决方案 MetalLB
私有云裸金属架构(这是相对云上环境来说,不是说无操作系统)上部署的 Kubernetes 集群,通常是无法使用 LoadBalancer 类型的 Service 的。因为 Kubernetes 本身没有为裸机群集提供网络负载均衡器的实现。
iMike
2020/05/24
7.9K1
k8s loadbalancer与ingress实践
k8s可以通过三种方式将集群内服务暴露到外网,分别是NodePort、LoadBalancer、Ingress,其中NodePort作为基础通信形式我们在《k8s网络模型与集群通信》中进行了介绍,这里我们主要关注LoadBalancer和Ingress
你大哥
2022/01/10
2K0
k8s loadbalancer与ingress实践
kubernetes-traefik(二十一)
使用nginx作为前端负载均衡,通过ingress controller不断的和kubernetes api交互,实时获取后端service,pod等的变化,然后动态更新nginx配置,并刷新使配置生效,达到服务发现的目的。
yuezhimi
2020/09/30
5190
Kubernetes集群部署相关
free -h,显示内存和利用率 用swapon -s可以检查特定分区,逻辑卷或文件的交换,-s是摘要的含义,用它来获取交换的详细信息,以千字节为单位 或者使用top命令 vmstat,可以用该命令查看交换和交换信息,无法查看交换的总值
用户1413827
2023/11/28
7630
Kubernetes集群部署相关
Traefik 企业实战:TraefikService篇
traefik 的路由规则就可以实现 4 层和 7 层的基本负载均衡操作,使用 IngressRoute IngressRouteTCP IngressRouteUDP 资源即可。但是如果想要实现 加权轮询、流量复制 等高级操作,traefik抽象出了一个 TraefikService 资源。此时整体流量走向为:外部流量先通过 entryPoints 端口进入 traefik,然后由 IngressRoute/IngressRouteTCP/IngressRouteUDP 匹配后进入 TraefikService,在 TraefikService 这一层实现加权轮循和流量复制,最后将请求转发至kubernetes的service。
用户1107783
2023/09/11
5140
Traefik 企业实战:TraefikService篇
基础指南:如何在K3s中配置Traefik?
云由临时的服务器组和向服务器分配容器的方法组成。容器是一种将应用程序打包到标准化单元中的方法,以便该应用程序可以在云中的任何服务器上平稳运行。经常出现的问题是需要将外部客户端的流量定向到云内的容器中,同时确保外部客户端不与云绑定。针对该问题,一个常见的解决方案是创建一个Ingress controller。
CNCF
2021/03/15
4.1K0
基础指南:如何在K3s中配置Traefik?
traefik系列之一 | 简介、部署和配置
基于 centos7.9,docker-ce-20.10.18,kubelet-1.22.3-0, traefik-2.9.10
Amadeus
2023/04/27
4.4K0
traefik系列之一 | 简介、部署和配置
K8s 开始
Kubernetes[1] 是用于自动部署,扩展和管理容器化应用程序的开源系统。本文将介绍如何快速开始 K8s 的使用。
GoCoding
2021/09/29
1.6K0
附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
k8s学习记录01
最近在本机macOS安装了开发用的k8s集群之后,花了些时间研究k8s,在这个过程中有一些零零星星的实操技巧,在这里记录一下,这些实际操作技巧均是在之前搭建的单机环境验证过的,可以作为其它环境的参考。
jeremyxu
2019/03/13
1K0
k8s学习记录01
Metallb - 贫苦 K8S 用户的负载均衡支持
在私有网络上运行 Kubernetes,和御三家相比,对 LoadBalancer 类型的服务的支持应该是众多表面差异中最醒目的一个了。类型为 LoadBalancer 的服务在 Kubernetes 中并没有直接支持,NodePort 和 ExternalIP 方案让很多私有云用户成为了 K8S 世界中的二等公民。接下来介绍的 Metallb,就给私有 Kubernetes 用户带来了一个方便、可用(而且不太成熟)的软件解决方案。
崔秀龙
2019/07/23
4.6K0
还不会Traefik?看这篇文章就够了!(文末送书)
暂且我们把Traefik当成和Nginx差不多的一类软件,待读完整篇文章,你就会对Traefik有不一样的认识。
没有故事的陈师傅
2021/11/12
4.7K0
还不会Traefik?看这篇文章就够了!(文末送书)
Kuberntes部署MetalLB负载均衡器
MetalLB是一个为基础 Kubernetes集群提供负载均衡实现的工具,使用标准路由协议。
小陈运维
2024/07/01
3790
Kuberntes部署MetalLB负载均衡器
Traefik2.3.x 使用大全(更新版)
Traefik 是一个开源的可以使服务发布变得轻松有趣的边缘路由器。它负责接收你系统的请求,然后使用合适的组件来对这些请求进行处理。
我是阳明
2021/01/04
5.4K0
Traefik2.3.x 使用大全(更新版)
Kubernetes的负载均衡方案:MetalLB
在Kubernetes部署完成服务后,我们经常需要将服务开放给到外部用户访问 。如果是使用云平台(阿里云、腾讯云、AWS等)的话,这个需求处理起来非常简单,可以通过云平台的LoadBalancer来实现。
西岸Alex
2022/10/31
7K0
Kubernetes的负载均衡方案:MetalLB
通过 Traefik 使用 Kubernetes Service APIs 进行流量路由
前面我们已经介绍了 Kubernetes 社区内部为 Kubernetes 开发了一种改进的定义和管理入口流量的新接口,也就是新的 Kubernetes Service APIs。Traefik 在2.4 版本中引入了对 Service APIs 的初始支持。本文我们将演示如何通过 Traefik 来使用新的 Gateway、GatewayClass 和 HTTPRoute API 将请求路由到后端的服务 Pod。
我是阳明
2021/03/01
1.3K0
使用 K3s 和 Traefik 创建本地开发集群
完整的 Kubernetes 集群往往非常复杂,需要较高的资源,往往我们在开发期间需要一个完整的 Kubernetes 来运行我们的应用,但是并不要求达到生产级别的集群,本文我们将探讨几种本地轻松配置 Kubernetes 集群的方法。
我是阳明
2020/11/03
2.3K0
使用 K3s 和 Traefik 创建本地开发集群
相关推荐
Traefik 企业实战:路由规则篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档