admin管理员组

文章数量:1567535

介绍

traefik开源的边缘路由器,traefik 本身就能跟 kubernetes API 交互,感知后端变化。traefik 是一个前端负载均衡器,做反向代理。对于微服务架构尤其是 kubernetes 等编排工具具有良好的支持;traefik部署在k8s上分为daemonset和deployment。所有操作都会自动实时进行(热加载)。在2.0版本之后增加了tcp代理。证书有效期为3个月,剩余不足30天时,Traefik将自动尝试续订。

Traefik基于EntryPoints、Routers、Middlewares和Services的概念构建。

其主要功能包括动态配置、自动服务发现和支持多种后端和协议。

  • EntryPoints:EntryPoints是Traefik的网络入口点。它们定义了接收数据包的端口,以及是监听TCP还是UDP。
  • Routers:路由器负责将传入的请求连接到能够处理它们的服务。
  • Middlewares:中间件附加到路由器上,可以在请求或响应发送到您的服务之前对其进行修改。
  • Services:Services负责配置如何到达最终将处理传入请求的实际服务。

核心概念

当请求Traefik时,请求首先到entrypoints,然后分析传入的请求,查看他们是否与定义的Routers匹配。如果匹配,则会通过一系列middlewares处理,再到traefikServices上做流量转发,最后请求到kubernetes的services上

边缘路由Edge Router

Traefik是一个边缘路由器;这意味着它是您平台的入口,拦截和路由所有传入的请求:它了解所有逻辑和规则,这些逻辑和规则决定了哪些服务处理哪些请求(基于路径、主机、头部信息等)。

动态发现服务 Auto Service Discovery

在传统意义上,边缘路由器(或反向代理)需要一个配置文件,就像nginx需要一个配置文件配置其中包含所有可能的通往服务的路由。而Traefik则是从服务本身获取这些路由信息。
在部署服务时,您会附加一些信息,这些信息会告诉Traefik服务可以处理的请求的特性。这意味着当服务被部署时,Traefik会立即检测到它并实时更新路由规则。同样地,当服务从基础设施中被移除时,相应的路由也会被相应地删除。您不再需要创建和同步充斥着IP地址或其他规则的配置文件。

对比Nginx ingress

Nginx Ingress Traefik ingress
协议 http/https、http2、grpc、tcp/udp http/https、http2、grpc、tcp、tcp+tls
路由匹配 host、path host、path、headers、query、path prefix、method
- 命名空间支持:共用或指定命名空间
- 部署策略:金丝雀部署、蓝绿部署、灰度部署
upstream探测 重试、超时、心跳探测 重试、超时、心跳探测、熔断
负载均衡算法 RR、会话保持、 最小连接、最短时间、一致性hash WRR、动态RR、会话保持
优点 简单易用,易接入,cpu利用率优势大 Golang编写,部署容易,支持众多的后端,内置WebUI
缺点 没有解决nginx reload,插件多,但是扩展性能查差 性能略逊于NGINX,但强于HAProxy

traefik部署

  • 前提条件
    其中master节点充当边缘节点,安装两块网卡,eth0:k8s集群内网ip eth1公网ip
    官方文档:https://doc.traefik.io/traefik/providers/kubernetes-crd/
  • 部署资源
    wget https://raw.githubusercontent/traefik/traefik/v2.11/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml
    kubectl apply -f kubernetes-crd-definition-v1.yml 
    kubectl get crd
    
  • 权限配置
    创建相应的ClusterRole和ClusterRoleBinding,赋予权限
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: traefik-ingress-controller
    rules:
      - apiGroups:
          - ""
        resources:
          - services
          - endpoints
          - secrets
        verbs:
          - get
          - list
          - watch
      - apiGroups:
          - extensions
          - networking.k8s.io
        resources:
          - ingresses
          - ingressclasses
        verbs:
          - get
          - list
          - watch
      - apiGroups:
          - extensions
          - networking.k8s.io
        resources:
          - ingresses/status
        verbs:
          - update
      - apiGroups:
          - traefik.io
          - traefik.containo.us
        resources:
          - middlewares
          - middlewaretcps
          - ingressroutes
          - traefikservices
          - ingressroutetcps
          - ingressrouteudps
          - tlsoptions
          - tlsstores
          - serverstransports
        verbs:
          - get
          - list
          - watch
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: traefik-ingress-controller
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind

本文标签: 路由物流K8straefik