千家信息网

k8s中的Traefik怎么理解

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,今天就跟大家聊聊有关k8s中的Traefik怎么理解,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Traefik 是一款开源的反向代理与负载均
千家信息网最后更新 2024年11月19日k8s中的Traefik怎么理解

今天就跟大家聊聊有关k8s中的Traefik怎么理解,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

Traefik 是一款开源的反向代理与负载均衡工具。
它最大的优点是能够与常见的微服务系统直接整合,可以实现自动化动态配置。
目前支持 Docker、Swarm、Mesos/Marathon、 Mesos、Kubernetes、Consul、Etcd、Zookeeper、BoltDB、Rest API 等等后端模型。

为什么比较偏向域Traefik呢,下面来简单对比下。

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

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

相对来说traefik更快速方便,同时支持更多的特性,使反向代理,负载均衡更直接更高效。

ingress分类nginx ingresstraefix ingress
协议http https htt2 grpc tcp udphttp https htt2 grpc tcp+tls
路由匹配host pathhost、path、headers、query、path prefix、method
命名空间支持-共用或指定命名空间
部署策略-金丝雀部署、蓝绿部署、灰度部署
upstream探测重试、超时、心跳探测重试、超时、心跳探测、熔断
负载均衡算法RR、会话保持、最小连接、最短时间、一致性hashWRR、动态RR、会话保持
优点简单易用,易接入Golang编写,部署容易,支持众多的后端,内置WebUI
缺点没有解决nginx reload,插件多,但是扩展性能查差没什么缺点,新版本支持UDP

下面我们开始进行traefick2.4.8安装

根据traefik官网介绍 https://doc.traefik.io/traefik/ traefik安装由以下4种方式

  • Use the official Docker image(使用docker镜像)

  • Use the Helm Chart(使用helm)

  • Use the binary distribution(二进制安装)

  • Compile your binary from the sources(源码编译)

我们当然是选择helm方式,helm是k8s的包管理器,可以简单理解为linux 的yum。下面我们先安装helm吧

安装Helm

登录官方网站https://helm.sh/zh/docs/intro/quickstart/ 查找最新版本,目前最新的稳定版本是3.5.4

下载helm3.4.5

wget https://get.helm.sh/helm-v3.5.4-linux-amd64.tar.gz

解压helm

tar -xzvf helm-v3.5.4-linux-amd64.tar.gz

cd linux-amd64

mv helm /usr/local/bin/

运行 helm --help显示以下内容表示安装成功

添加helm仓库,这里添加2个(traefik和aliyun)

helm repo add traefik https://helm.traefik.io/traefik

helm repo add apphub https://apphub.aliyuncs.com/

更新repo仓库资源

helm repo update

下载traefik对应的chart到本地

helm pull traefik/traefik

解压traefik

tar -xzvf traefik-9.19.0.tgz

修改values.yaml (这里主要是把traefik的service类型改成NodePort--原来是LoadBalancer。另外对外的http和https端口nodePort也打开,我这边因为是端口没被占用所以随便设,读者可以自行修改)

创建traefik命名空间(这里我是为了方便管理所以新增了个命名空间,读者也可以安装到default空间下,这个看个人喜欢)

kubecl create -n traefik

下载traefik2.4.8镜像

docker pull traefik:2.4.8

出现以下信息表示安装成功

安装本地traefik到命名空间traefik中

helm install traefik ./traefik/ -n traefik

出现以下信息表示安装成功

traefik2.4.8出于安全考虑,默认情况下,此HelmChart不会公开Traefik仪表板。但是我们还是有方法可以查看的,例如官网的创建一个 IngressRoute

vi traefik-dashboard.yaml

# dashboard.yamlapiVersion: traefik.containo.us/v1alpha1kind: IngressRoutemetadata:  name: dashboardspec:  entryPoints:    - web  routes:    - match: PathPrefix(`/dashboard`) || PathPrefix(`/api`)      kind: Rule      services:        - name: api@internal          kind: TraefikService

安装(这里我依然是安装到traefik命名空间方便管理)

kubectl apply -f traefik-dashboard.yaml -n traefik

出现以下界面表示安装成功

我们创建一个nginx来测试下

vi nginx-demo-ingress-route.yml

我们创建一个nginx服务,IngressRoute路由设置改成'/demo/'

apiVersion: apps/v1kind: Deploymentmetadata:  name: nginx  labels:    app: nginxspec:  replicas: 1  selector:    matchLabels:      app: nginx  template:    metadata:      labels:        app: nginx    spec:      containers:      - name: nginx        image: nginx:alpine        volumeMounts:        - name: timezone          mountPath: /etc/localtime      volumes:        - name: timezone          hostPath:            path: /usr/share/zoneinfo/Asia/Shanghai---apiVersion: v1kind: Servicemetadata:  name: nginx-svcspec:  ports:  - port: 80    targetPort: 80  type: NodePort  selector:    app: nginx---apiVersion: traefik.containo.us/v1alpha1kind: IngressRoutemetadata:  name: nginx-ingressroute  namespace: defaultspec:  entryPoints:    - web  routes:  - match: PathPrefix(`/demo/`)     kind: Rule    services:    - name: nginx-svc      port: 80

下载nginx镜像

docker pull nginx:alpine

安装

kubectl apply -f nginx-demo-ingress-route.yml -n traefik

然后我们看到dashboard界面的services变成了5个(原来的是4个),route由3个变成4个。

打开route看下路由情况

可以看到我们新增的路由已经生效,接下来我们尝试访问一下
http://{外网IP}:32080/demo/

说明路由生效,至此我们的traefik安装成功。

看完上述内容,你们对k8s中的Traefik怎么理解有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

0