Traefik最佳实践

Traefik最佳实践_第1张图片

Ingress三个组件:

  1. 反向代理负载均衡器(如 nginx、Haproxy 等)
  2. Ingress Controller( 与 kubernetes API 进行交互,实时的感知变化,实现动态服务发现与更新)
  3. Ingress(规则合集)

Features

  • Continuously updates its configuration (No restarts!)
  • Supports multiple load balancing algorithms
  • Provides HTTPS to your microservices by leveraging Let’s Encrypt (wildcard certificates support)
  • Circuit breakers, retry
  • See the magic through its clean web UI
  • Websocket, HTTP/2, GRPC ready
  • Provides metrics (Rest, Prometheus, Datadog, Statsd, InfluxDB)
  • Keeps access logs (JSON, CLF)
  • Fast
  • Exposes a Rest API
  • Packaged as a single binary file (made with ❤️ with go) and available as a tiny official docker image

Supported Backends

  • Docker / Swarm mode
  • Kubernetes
  • Marathon
  • Rancher (Metadata)
  • File

原理

Traefik最佳实践_第2张图片

必选项

  1. 前端使用CLB,实现外部流量的四层负载,以及作为Kubernetes集群服务访问的入口。
  2. 采用独占Ingress节点的方式,以避免业务应用与Ingress服务发生资源争抢
Ingress CLB:Ingress接入层前端CLB实例
Ingress Node:部署Ingress Pod的集群节点
Ingress Pod:Ingress服务实例
这三者之间依据标签node-role.kubernetes.io/ingress=true进行关联:
1.Ingress SLB后端只会挂载打标了node-role.kubernetes.io/ingress=true的集群Node;
2.Ingress Pod只会被部署到打标了node-role.kubernetes.io/ingress=true的集群Node;

部署方法:

  • 方法一:通过DaemonSet方式将其部署到目标Ingress Node
  • 方法二:采用Deployment配合亲和性方式进行部署
    • 快速扩容随着业务流量不断增长,集群规模不断扩大,只需要简单地通过打标签的方式来快速扩容Ingress接入层
  • 方法三:使用hostNetwork: true在每台 Node 节点上都创建 Pod

方案一

  • 后端多台服务器组成Kubernetes集群,每台节点使用hostPort 的方式部署traefik容器,traefik监听节点的80端口,前端CLB监听后端Kubernetes节点的80端口将外部访问负载分担至traefik。
  • 由Traefik进行七层负载均衡,可以实现基于域名或访问目录等来实现映射与负载,将访问流量映射至Kubernetes Service并通过Service负载至最终业务POD所在的容器。

优势:

  1. 所有应用实现域名方式访问,相对IP+端口的访问方式,提高了访问的便捷性与可维护性。
  2. 简化应用发布的操作流程,域名与服务实现了自动更新与配置,只需定义ingress与添加外部DNS条目两步操作,即可完成应用的对外发布,减少操作流程,提高维护效率。

不足:

  1. 集群内部的服务转发与负载应对大规模访问流量,存在性能瓶颈,还有优化空间。
  2. 暂时无法实现LVS与Traefik的弹性伸缩与自动扩容。
  3. 基于CLB七层转发的ingress与nginx-ingress-controller相比,缺少了一些高级Ingress功能,无法满足某些客户场景的需求,比如支持域名path的正则匹配等。

方案二

  • LoadBalancer代理Pod
    • 公网CLB --> 后端是多个nginx-ingress-controller pod

https://github.com/containous/traefik
https://docs.traefik.io/getting-started/install-traefik/
https://www.cnblogs.com/Irving/p/9888711.html

Traefik最佳实践_第3张图片

你可能感兴趣的:(Helm,Kubernetes)