1. 前言
说到web服务的开源网关,我首先想到的是Nginx,最早使用的就是它,现在都还在使用它。系统上线了Docker Swarm集群之后,不继续使用Nginx直接做Docker服务的网关,是因为Nginx毕竟比Docker Swarm出现的早,其集成度还是不高。
我们经过技术调研对比后,选择了Traefik作为微服务API网关,也是因为Traefik和Docker集成比较好,通过在各个应用程序的docker-compose.yml里设置labels,把Traefik声明清楚,服务能够被Traefik自动接管,用不着我们在nginx.conf里那样手工进行配置,这大大简化了我们的配置工作。
当然nginx ingress controller和k8s的搭配,我并没有亲自搭建过,虽然有几台AI服务器是采用这样的部署方式,都是厂家预安装好的。
2. 简介
Traefik是一个高性能、易用的API网关,支持多种后端服务,如Docker、Kubernetes等,它采用Go语言开发。
Traefik官网文档地址是:Traefik Proxy Documentation - Traefik。
Traefik基于EntryPoints入口点、Routers路由器、Middlewares 中间件和Services服务的概念。它主要功能包括动态配置、自动服务发现以及对多个后端和协议的支持。
-
EntryPoints: EntryPoints对Traefit是一个网络入口点,它定义了接收数据包的端口port, 包括TCP和UDP。
-
Routers: 路由器负责将传入的请求连接到可以处理这些请求的服务。
-
Middlewares: 中间件附着于路由器上,它能够修改经过路由器的请求包和应答包。
-
Services: 服务组件负责配置请求怎样达到实际的后端服务。
3. 安装
各种安装方法说明参见官网:Traefik Installation Documentation - Traefik, 这里仅仅贴一下Docker Swarm集群里的安装方式,主要是docker-compose.yml编排: