今天就跟大家聊聊有关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 ingress   traefix ingress
协议 http https htt2 grpc tcp udp http https htt2 grpc tcp+tls
路由匹配 host path host、path、headers、query、path prefix、method
命名空间支持 共用或指定命名空间
部署策略 金丝雀部署、蓝绿部署、灰度部署
upstream探测 重试、超时、心跳探测 重试、超时、心跳探测、熔断
负载均衡算法 RR、会话保持、最小连接、最短时间、一致性hash WRR、动态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显示以下内容表示安装成功

k8s中的Traefik怎么理解-编程知识网

添加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

k8s中的Traefik怎么理解-编程知识网

解压traefik  

tar -xzvf traefik-9.19.0.tgz

k8s中的Traefik怎么理解-编程知识网

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

k8s中的Traefik怎么理解-编程知识网

k8s中的Traefik怎么理解-编程知识网

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

kubecl create -n traefik

下载traefik2.4.8镜像

docker pull traefik:2.4.8

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

k8s中的Traefik怎么理解-编程知识网

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

helm install traefik ./traefik/ -n traefik

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

k8s中的Traefik怎么理解-编程知识网

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

vi traefik-dashboard.yaml

# dashboard.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: dashboard
spec:
  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

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

k8s中的Traefik怎么理解-编程知识网

我们创建一个nginx来测试下

vi nginx-demo-ingress-route.yml 

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

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  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: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  ports:
  - port: 80
    targetPort: 80
  type: NodePort
  selector:
    app: nginx
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: nginx-ingressroute
  namespace: default
spec:
  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

k8s中的Traefik怎么理解-编程知识网

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

k8s中的Traefik怎么理解-编程知识网

打开route看下路由情况

k8s中的Traefik怎么理解-编程知识网

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

k8s中的Traefik怎么理解-编程知识网

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