今天就跟大家聊聊有关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显示以下内容表示安装成功
添加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.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
出现以下界面表示安装成功
我们创建一个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
然后我们看到dashboard界面的services变成了5个(原来的是4个),route由3个变成4个。
打开route看下路由情况
可以看到我们新增的路由已经生效,接下来我们尝试访问一下
http://{外网IP}:32080/demo/
说明路由生效,至此我们的traefik安装成功。