Traefik Enterprise 是一种统一的云原生网络解决方案,将 API 管理、入口控制和服务网格整合到一个简单的控制平面中。Traefik Enterprise 为整个组织的开发人员和运营团队减轻了微服务网络的复杂性。其核心组件:
1、Ingress Proxies - 入口代理
入口代理主要为接受来自外部网络的请求并根据自定义规则定义和行为将它们转发至集群上运行的服务的工作节点。
2、Mesh Proxies - Mesh 代理
Mesh 代理管理集群上服务之间的内部通信,以便它们可以协同工作,同时提供服务间身份验证、速率限制和流量拆分等功能。
3、Controllers - 控制器
控制器查询网络基础设施以生成适当的路由配置,然后将其分发至代理节点。除此之外,控制器还存储有关集群的所有数据,通常,可以通过 API 访问这些数据。
所有 Traefik Enterprise 节点类型都可以通过添加更多节点来水平扩展。它们一起形成了一个高可用性集群,可以自主维护自己的运行状况。
不仅如此,Traefik Enterprise 也是建立在开源 Traefik Proxy 和 Traefik Mesh 之上,提供独家的一体化、高可用性、可扩展和分布式功能,并结合对生产级部署的高级捆绑支持。
Traefik Enterprise v2.6 与 2022 年 3 月 上旬正式面向大众,相比半年前发布的 v2.5,此版本是统一云原生网络解决方案的最新更新,也是一个新的里程碑。值得注意的是,此版本的核心要点主要聚焦在 OpenID Connect (OIDC) 层面。在构建、打包机制中,引入了与 ARM64 兼容的 Docker 镜像和二进制文件。现在,让我们深入了解 Traefik Enterprise v2.6 所带来的新功能特性。
正如之前所述,Traefik Enterprise v2.6 的发布主要聚焦于 OpenID Connect (OIDC) 相关的多项功能改进,涉及 OIDC 状态模式、 Microsoft AD 支持、Vault 命名空间和 API 门户增强功能等。
OIDC 中间件的有状态模式
Traefik Enterprise v2.6 包括为 OIDC 中间件添加新的有状态模式。之前的 OIDC 中间件提供了无状态选项,要求会话数据与 Cookie 一起存储。 Cookie 可能会变得太大,当它们这样做时会在客户端引入延迟。
使用新的有状态模式,用户可以将所有会话数据安全地存储在 Traefik Enterprise 外部的 K/V 存储中,完全消除了在客户端应用程序上存储 Cookie 的开销。目前支持的 K/V 存储包括 Consul、Etcd、Zookeeper 和 Redis。启用后,它们可以将用于通过 OIDC 进行身份验证的客户端请求的 Cookie 的总大小从数百 KB 减少到仅几个字节。有状态模式的引入将降低延迟并提高效率。
接下来,我们基于如下的 OIDC 改进示例来简要了解一下 OIDC 中间件的有状态模式。
下面为一个如何将 OIDC 配置为使用会话存储的简要示例,其中自定义发现和身份验证参数应用于 Traefik Enterprise 和身份验证服务器之间的授权流。具体配置可参考如下所示:
# Static Configuration authSources: my-oidc-source: oidc: issuer: "http://my-auth-server-addr/auth/realms/traefik" clientID: "demo-app" clientSecret: "my-app-secret" #Required by Microsoft AD when returning custom claims discoveryParams: app-id: my-app-id sessionStorages: consulStore: consul: tls: {} endpoints: - "my-consul-server:8501"
动态配置可参考如下所示:
# Dynamic Configuration http: middlewares: my-oidc: plugin: oidcAuth: source: my-oidc-source scopes: - openid redirectUrl: "/callback" session: store: consulStore name: "%s-session" path: "/" secret: my-secret-token # Overrides the prompt-consent option during the authorization phase with the IDP authParams: prompt: none forwardHeaders: X-Traefik-Group: groups claims: Contains(`groups`, `admin`)
支持 Microsoft AD
Traefik Enterprise v2.6 还带来了两个新的自定义选项,可以覆盖通常的 OIDC 授权流程。在使用自定义声明或启用单点登录时,这些选项改进了与 Microsoft Active Directory (AD) 的集成,而无需用户登录后的授权。
支持 HashiCorp Vault 命名空间
此版本的 Traefik Enterprise 改进了对 HashiCorp Vault 和 Consul 的支持。它通过支持其名称空间隔离功能来确保与 HashiCorp 的企业产品的兼容性。
目前,Traefik Enterprise 通过两个独立的集成支持 Vault。首先,Traefik 的证书解析器利用了 Vault PKI 机密引擎。其次,证书存储使用其 K/V 机密引擎。由于没有命名空间配置选项,因此无法连接到使用该功能的 Vault 企业实例,例如 HashiCorp 的托管选项,它默认使用命名空间。
我们先来看一下 Vault PKI 配置示例,具体如下所示:
certificatesResolvers: vaultpki: vault: url: "https://vault-cluster.mydomain:8200" auth: token: "my-secret-token" enginePath: "pki" role: "vault-role" namespace: "admin"
接下来,我们再来看一下 Vault K/V 配置示例,具体可参考如下所示:
plugin: vault: url: "https://vault-cluster.mydomain:8200" auth: token: "my-secret-token" enginePath: "kv" syncInterval: "5s" rescanInterval: "60s" namespace: "certs"
如果大家有兴趣了解有关使用最新版本 Traefik Enterprise 更多的功能特性信息,请查看此博客文章“Lock Down Your Network with Traefik Enterprise and Vault.”。
API 门户增强
Traefik Enterprise v2.6 为 API 门户带来了更有价值意义的功能增强,所有这些都是基于客户的要求而定的。在之前的 Traefik Enterprise 版本中,API 门户仅能读取 JSON 格式文件。而基于此版本,其现在也按照 Open API 的规范读取 YAML 文件。
除此之外,在 Traefik Enterprise v2.6 版本,还支持更多关于用户如何获取 API 端点的配置选项。大家现在可以依据自身的业务场景需求在 URL 中指定参数并在后端指定 API 规范的端点路径。我们来了解一下在如下提供方环境下的相关配置情况,具体可参考:
基于 Docker 配置示例,如下所示:
labels: - "traefik.http.routers.openapi-yaml.entrypoints=web" - "traefik.http.routers.openapi-yaml.rule=Host(`openapi.docker.localhost`)" - "traefik.http.services.openapi-yaml.loadbalancer.server.port=8080" - "traefik.http.services.openapi-yaml.loadbalancer.apiportal.path=spec.yaml"
基于 Kubernetes 配置示例,如下所示:
apiVersion: v1 kind: Service metadata: name: whoami namespace: default annotations: traefik.ingress.kubernetes.io/service.apiportal.path: spec.json spec: ports: - name: web port: 80 selector: app: traefiklabs task: whoami
基于 Traefik Mesh 的云原生拓扑结构示意图,如下所示:
其实,从本质上而言,Traefik Enterprise 2.6 Version 只是统一云原生网络堆栈生态体系的一个最新版本。或许,在不久的将来,我们将迎来发展更好的 Traefik Enterprise 产品,以帮助不同企业、组织简化其现代分布式应用程序操作。与此同时,基于 Traefik Enterprise 所支持传统和云原生应用程序的混合支持,从而能够帮助各大厂商、企业以及组织机构逐步、安全地迁移到微服务平台,使其成为云原生生态体系的最佳解决方案之一。
# 参考资料