k8s中的Traefik怎么理解

65次阅读
没有评论

共计 3433 个字符,预计需要花费 9 分钟才能阅读完成。

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

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 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.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 看下路由情况

k8s 中的 Traefik 怎么理解

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

k8s 中的 Traefik 怎么理解

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

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计3433字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)