一文搞懂 Traefik Proxy 2.10 新版本特性

简介: Hello folks,我是 Luga,今天我们来分享一下关于 Traefik 最新版本 - v2.10 相关特性。

    Hello folks,我是 Luga,今天我们来分享一下关于 Traefik 最新版本 - v2.10 相关特性。

    其实,从整个版本的规划角度来看,Traefik Proxy 2.10 作为一个过渡版本,但同样丰富了不少内容:比如,提高了我们使用 Traefik Proxy 服务网格的能力,增强了 Prometheus 指标以及并简化了我们的 Nomad 配置等,具体可参考如下解析。

01

新 Prometheus 指标的引入


    为了增强使用 Prometheus 与 Traefik Proxy 时的用户体验,我们现在可以根据一个或多个标头值的值拆分总请求指标的观察结果。此选项允许我们根据标头信息收集有关客户的更多详细信息。

    其实,标头本质上是灵活的,因此我们可以想出许多使用此功能的方式,包括创建自定义标头来披露应用程序版本。

    Traefik 将允许我们为“requests_total”指标和包含分配给每个标签的值的请求标头定义额外的标签,具体如下所示:


metrics:
prometheus:
buckets:
- 0.1
- 0.3
- 1.2
- 5.0
headerlabels:
useragent: "User-Agent"

    需要注意的是:默认情况下未启用此功能,因此默认情况下不会影响性能。当我们启用该功能时,如果请求中不存在标头,它将以空值自动添加。标签必须是普罗米修斯的有效标签名称。


02

原生 Kubernetes 服务负载均衡改进


    截至目前,Traefik 只将传入流量转发到 Pod。这使得很难解决需要使用 Traefik进行本机 Kubernetes 负载平衡的特定用例,因为它需要使用变通方法,例如创建外部服务。这些变通方法不能令人满意,这个缺失的功能是一个阻止者,特别是对于服务网格用户采用 Traefik。

    现在,用户有一个新选项供提供商 Kubernetes Ingress 和 Kubernetes IngressRoute,以决定任何给定负载平衡器的子项是否直接在 Pod IP 中,或者 Kubernetes 服务是否被指定为单个子项。在这种情况下,Kubernetes 服务本身通过入口控制器在上游配置中使用的所有端点的列表来平衡对 Pod 的负载。

    这对使用第三方服务网格(如Cilium)的用户尤为重要。另一个好处是,这种配置通过消除流量被重定向到不存在的客户端或 Pod 的任何机会,加强了 Traefik 对零停机部署的原生支持。

    其工作原理较为简单,我们只需将 “nativeLB” 选项添加到服务中即可,具体如下所示:


apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: whoami
namespace: traefik
spec:
entryPoints:
- web
routes:
- kind: Rule
match: PathPrefix(`/who`)
services:
- kind: Service
name: whoami
namespace: app
port: 80
nativeLB: true # Enable the option

    需要注意的是:

    在已删除 Pod 的特定情况下,当在 Traefik 更新其路由配置之前收到请求时,我们可能会生成 502 坏网关响应,因为 Traefik 配置不反映实际的基础设施。使用 “maxIdleConnectionPerHost” 选项通过与后端服务(Pod)创建新连接来缓解 502 错误,避免连接重用到突然下降的 Pod。


03

Nomad 多个命名空间支持


    Nomad 允许我们在任何给定的集群中使用多个命名空间。然而,我们的原始集成允许我们只使用单个命名空间,并要求我们在集群中为每个命名空间定义 Traefik Proxy 实例。此版本带来了使用 Traefik 的单个实例覆盖给定集群中所有命名空间的能力。

    具体如下所示:


providers:
nomad:
namespaces:
- "ns1"
- "ns2"

    以上为 Traefik 最新版本相关特性,更多关于 Traefik 的技术文章,将在后续文章中讲述,欢迎关注,谢谢!

 Adiós !

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
8月前
|
负载均衡 应用服务中间件 nginx
5分钟搞懂Ingress / IngressController / IngressClass的区别
先来个一句话总结:Ingress由Ingress规则、IngressController、IngressClass这3部分组成。Ingress资源只是一系列路由转发配置,必须使用IngressController才能让路由规则生效,而IngressClass是IngressController的具体实现。使用原则:先部署IngressController → 再部署Ingress资源。
5分钟搞懂Ingress / IngressController / IngressClass的区别
|
9月前
|
Kubernetes Java API
Kubernetes官方java客户端之五:proto基本操作
实战K8S官方java客户端的protobuf基本操作
254 0
Kubernetes官方java客户端之五:proto基本操作
|
9月前
|
Kubernetes 负载均衡 容器
Kubernetes LoadBalancer使用场景例子及配置步骤
Kubernetes 的 LoadBalancer 类型的服务用于将流量从集群外部的负载均衡器路由到集群内的服务。它通常用于公共云提供商(如 AWS、GCP、Azure)或者其他支持这种负载均衡机制的环境中。 以下是一个使用场景的例子:假设你在 Kubernetes 集群中部署了一个 web 应用程序,并希望将该应用程序暴露给外部用户,以便他们可以通过公共网络访问这个应用程序。你可以使用 LoadBalancer 类型的服务来实现这一目标。 下面是配置步骤: 1. 创建一个 `Service` 对象,并设置 `type: LoadBalancer`。 ```yaml apiVersio
1031 0
BXA
|
12月前
|
存储 弹性计算 Kubernetes
解析Kubernetes的设计与实现原理
Kubernetes 是一种用于自动化部署、扩展和管理容器化应用程序的开源平台。它通过提供跨主机集群的容器协调和管理服务,实现了高可用性和弹性伸缩的容器集群管理。
BXA
138 0
|
12月前
|
Kubernetes 安全 API
【kubernetes】API Server 保证性能的方式
【kubernetes】API Server 保证性能的方式
96 0
|
存储 缓存 负载均衡
nginx是干什么的?有哪些特性?底层原理是什么?
nginx是干什么的?有哪些特性?底层原理是什么?
374 0
|
存储 JSON Kubernetes
kubernetes API Server 看这篇试试(2)
kubernetes API Server 看这篇试试(2)
kubernetes API Server 看这篇试试(2)
|
存储 JSON Kubernetes
kubernetes API Server 看这篇试试(1)
kubernetes API Server 看这篇试试(1)
kubernetes API Server 看这篇试试(1)
|
Kubernetes 程序员 应用服务中间件
Kubernetes深入学习之二:编译和部署镜像(api-server)
在k8s的源码包中,除了kubectl这样的可执行程序,还有api-server、controller-manager这些docker容器,今天的实战是修改这些容器镜像的源码,再部署新的镜像,验证我们修改的代码是否生效
552 0
Kubernetes深入学习之二:编译和部署镜像(api-server)