一文读懂为什么需要 Traefik CRD?

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: Hello folks,我是 Luga,今天我们来聊一下云原生网关 Traefik 核心技术之一-Traefik CRD。

    Hello folks,我是 Luga,今天我们来聊一下云原生网关 Traefik 核心技术之一-Traefik CRD。

    随着容器编排不断获得关注,Kubernetes 已成为开发人员和 DevOps 工程师的标准:他们现在习惯于声明其系统的所需状态,而不是在全球范围内手动部署软件。

    但是,如何宣告这一理想状态呢?如果 Kubernetes 没有完全捕捉到我们所设计的用例的微妙之处,而我们需要比它所知道的更具描述性,该怎么办?

    或许,我们可以这篇文章中找到答案~

01

Traefik CRD 历史背景


    虽然 Kubernetes 提供了内置的 API 对象和资源,但可以使用自定义资源定义 (CRD) 将 Kubernetes API 扩展到我们自己喜欢的任何对象。这使我们能够可以捕捉用例的微妙之处,并利用 Kubernetes 提供的灵活性。

    Traefik CRD(Custom Resource Definition)是在 Traefik 1.6 版本中引入的,Traefik 于 2018 年 5 月发布。在引入 CRD 之前,Traefik 依赖于 Kubernetes Ingress 对象来配置路由和负载均衡。 虽然 Ingress 对象提供了基本级别的功能,但它们有一些限制,使它们不适合更复杂的用例。

    Ingress 对象的主要限制之一是它们不支持高级路由功能,例如流量拆分、金丝雀发布和蓝绿部署。 此外,Ingress 对象要求用户以特定格式定义他们的路由规则,这对于具有多个服务的大型部署来说可能难以管理。

    为了解决这些限制,Traefik 引入了自己的自定义资源类型,例如中间件、ingressroutes 和 ingressroutetcps,可用于配置更高级的路由和负载均衡功能。 这些自定义资源是使用 Kubernetes CRD 定义的,提供了一种使用自定义资源扩展 Kubernetes API 的方法。

    随着 CRD 的引入,Traefik 变得更加灵活和可定制,允许用户定义自己的自定义路由规则和其他特定于其应用程序环境的配置。 这使得 Traefik 成为管理 Kubernetes 上复杂微服务架构的更强大的工具。 自推出以来,Traefik 不断改进和扩展对 CRD 的支持,使其成为管理 Kubernetes 集群的越来越受欢迎的选择。

02

Traefik CRD ,一个更佳的选择


    通常情况下,在实际的业务场景中,Kubernetes 不仅具有内置对象,它还允许我们定义自己的对象,从而扩展其描述功能,这便是 CRD(自定义资源定义)发挥作用的地方。Traefik 也不例外。

    Traefik Kubernetes CRD(自定义资源定义)是一个强大的工具,它克服了 Ingress 规范的限制,并允许在提供清晰结构的基础上提供更多选项,例如:

    1、IngressRoute:这是 Ingress 对象的扩展等价物,增加了对各种选项的支持,例如负载平衡算法。

    2、中间件:中间件是一个概念,我们可以混合和匹配路由以外的所有内容,无论是访问控制、标头更新、断路器、路径操作、错误控制、重定向等等。

    3、TraefikService:为 HTTP 负载平衡和镜像提供抽象。它允许我们定义应如何在集群中的多个服务之间分配流量。

    4、IngressRouteTCP & MiddlewareTCP:顾名思义,允许我们定义 TCP 路由并在此过程中调整请求。

    5、IngressRouteUDP:再次添加对不同协议,例如,UDP的支持。

    6、TLSOptions:微调 TLS 连接参数,例如,最低 TLS 版本和应使用的密码套件。

    7、ServersTransport:调整 Traefik 和服务之间的通信。

    那么,什么是 Traefik CRD?

    Traefik CRD(自定义资源定义)是一种扩展机制,允许我们在 Kubernetes 中定义自定义资源,作为一种流行的开源反向代理和负载均衡器,Traefik 可以部署为 Kubernetes 入口控制器,支持各种 Kubernetes 资源,例如 Deployments、Services 和 Ingress 对象。

    Traefik CRD 提供了一种方法来扩展 Traefik 的功能,使其超出标准 Kubernetes 资源中可用的功能。 使用 CRD,我们可以定义自己的自定义资源类型,例如中间件、ingressroutes 和 ingressroutetcps,这些资源类型可用于配置 Traefik 的路由、负载均衡等功能。

    除此之外,使用 Traefik CRD,我们可以定义复杂的路由规则、中间件配置和其他特定于我们的应用程序环境的定制,从而使得我们可以实现仅使用标准 Kubernetes 资源无法实现的更高级用例。

03

案例解析:使用 Traefik CRD 实现负载均衡策略


   现在我们知道了 Traefik CRD 是什么,我们以基于 Traefik CRD 实现负载均衡策略为例,简要剖析其实现原理。

    这里有一个如何使用 Traefik CRDs 配置加权循环或最少连接负载均衡策略的示例具体配置如下所示:


apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: my-ingressroute
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`example.com`)
      kind: Rule
      services:
        - name: backend-1
          port: 80
          weight: 5
          strategy:
            type: "wrr"
        - name: backend-2
          port: 80
          weight: 3
          strategy:
            type: "wrr"
        - name: backend-3
          port: 80
          strategy:
            type: "leastconn"

    在上述配置示例中,我们定义了一个“IngressRoute”,监听“web”入口点并将请求匹配到“example.com”。 `services` 字段包含应处理与此路由匹配的请求的后端服务列表。 我们还使用“strategy”字段为每个服务指定负载平衡策略。

    前两个服务“backend-1”和“backend-2”使用加权循环 (WRR) 负载平衡策略。 `weight` 字段用于指定每个后端服务器的相对权重。在这种情况下,`backend-1` 的权重为 5,而 `backend-2` 的权重为 3。这意味着 `backend-1` 将收到大约 5/8 的请求,而 `backend-2` ` 将收到大约 3/8 的请求。

    `strategy` 字段用于指定负载均衡策略。 在这种情况下,我们为前两个服务使用 `wrr` 类型。

    第三个服务,`backend-3`,使用最少连接负载均衡策略。这意味着请求将发送到活动连接最少的服务器。 我们为此服务指定了“leastconn”类型。

    除上述所述的负载均衡策略外,Traefik 还支持其他负载均衡策略,例如随机、IP 哈希和基于 cookie 的负载均衡。我们可以使用“策略”字段和任何相关参数配置这些策略。 具体配置选项可能因我们所使用的策略而异。

04

Traefik CRD 能够实现的价值?


    Traefik CRD 为我们所构建的 Ingress 和 API 管理带来了诸多好处。以下是将它们纳入我们的工作流程的几个至关重要的原因,具体如下:

    1、灵活性

    使用 Traefik CRD,我们可以获得无与伦比的灵活性和对 Ingress 流量的细粒度控制。利用为我们的定制应用程序需求量身定制的高级路由、流量管理和安全功能。

    2、兼容性

    Traefik CRD 与 Traefik 的工具和功能生态系统无缝协作,使其非常适合我们现有的 Traefik 设置。

    3、高级用例

    Traefik CRD 使我们能够实现高级用例,例如,标准 Kubernetes Ingress 对象可能不支持的金丝雀部署、A/B 测试和速率限制。这使我们可以实施复杂的流量管理策略,以确保应用程序平稳运行。

    4、易用性:使用标准 Kubernetes 清单文件很容易定义、配置和管理,遵循与其他 Kubernetes 资源相同的声明方法。

    在本文中,我们深入研究了 Traefik 中的 Kubernetes CRD。我们讨论了 Kubernetes Ingress 限制以及 Traefik CRD 如何克服这些限制,提供了一个实际的负载均衡示例。

    我们强调了 Traefik CRD 的好处,包括它们的灵活性和兼容性。无论我们是从事软件开发工作还是 DevOps 工作,我们都鼓励大家在 Kubernetes 部署中探索 Traefik CRD 的强大功能,以获得更健壮和可扩展的应用程序基础设施。

    此外,CRD 不仅用于 Traefik Proxy,作为一种 Kubernetes 原生 API 管理解决方案,可简化 API 发布、安全和管理的 Traefik Hub 也适用。还利用原生 Kubernetes 结构,如 CRD、标签和选择器,还完全符合 GitOps 标准,可快速实现价值并提高用户的工作效率。

    有关 Traefik 更多内容,大家可参考官网所示……

    Adiós !

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
Kubernetes 应用服务中间件 API
kubernetes系列文章第二篇-kubectl
kubernetes系列文章第二篇-kubectl
|
存储 JSON Kubernetes
Kubernetes必备知识: Annotations
Annotations(注解) 是 key/value 形式附加于对象的注解。不同于 Labels 用于标志和选择对象,Annotations 则是用来记录一些附加信息,用来辅助应用部署、安全策略以及调度策略等。比如 deployment 使用 annotations 来记录 rolling update 的状态。
5384 0
|
1月前
|
存储 Kubernetes 调度
|
JSON Kubernetes 数据可视化
Istio入门二——手把手教你使用Istio
Istio入门二——手把手教你使用Istio
370 1
|
Kubernetes Linux 容器
【Istio实际操作篇】Istio入门10分钟快速安装
【Istio实际操作篇】Istio入门10分钟快速安装
250 0
|
JSON Kubernetes Cloud Native
Kubernetes Deployment【3】管理高级技巧详解
Kubernetes Deployment【3】管理高级技巧详解
|
存储 Kubernetes API
kubernetes代码阅读-apiserver基础篇
apiserver是整个kubernetes的核心模块,做的事情多,代码量也较大。市面上已经有不少apiserver代码解读的文章了,但问题在于,由于k8s的代码变化很快,想写一篇长久能用的未必能做到。
2081 0
|
存储 Prometheus Kubernetes
Kubernetes的DaemonSet(上篇)
Kubernetes的DaemonSet(上篇)
Kubernetes的DaemonSet(上篇)
|
Kubernetes Linux 容器
【Istio实际操作篇】Istio入门,10分钟快速安装
上一篇讲了什么是Istio的理论篇,这次我们就来实际操作。 想看上一篇理论篇的看这里(看完绝对有所收获): [\[Istio是什么?\] 还不知道你就out了,一文40分钟快速理解_小叶的技术Logs的博客-CSDN博客] https://blog.csdn.net/qq_48450494/article/details/124347864
633 0
【Istio实际操作篇】Istio入门,10分钟快速安装
|
Kubernetes 监控 网络协议
Kubernetes的DaemonSet(下篇)
Kubernetes的DaemonSet(下篇)