首页 > 运维 > Linux > ingress-traefik安装与配置
2019
01-31

ingress-traefik安装与配置

Traefik 是一个边缘路由器,是你整个平台的大门,拦截并路由每个传入的请求:它知道所有的逻辑和规则,这些规则确定哪些服务处理哪些请求;传统的反向代理需要一个配置文件,其中包含路由到你服务的所有可能路由,而 Traefik 会实时检测服务并自动更新路由规则,可以自动服务发现。

  • Providers 用来自动发现平台上的服务,可以是编排工具、容器引擎或者 key-value 存储等,比如 Docker、Kubernetes、File
  • Entrypoints 监听传入的流量(端口等…),是网络入口点,它们定义了接收请求的端口(HTTP 或者 TCP)。
  • Routers 分析请求(host, path, headers, SSL, …),负责将传入请求连接到可以处理这些请求的服务上去。
  • Services 将请求转发给你的应用(load balancing, …),负责配置如何获取最终将处理传入请求的实际服务。
  • Middlewares 中间件,用来修改请求或者根据请求来做出一些判断(authentication, rate limiting, headers, …),中间件被附件到路由上,是一种在请求发送到你的服务之前(或者在服务的响应发送到客户端之前)调整请求的一种方法。

1.安装:

在 Traefik 中的配置可以使用两种不同的方式:

  • 动态配置:完全动态的路由配置
  • 静态配置:启动配置

安装 Traefik 到 Kubernetes 集群中的资源清单文件我这里提前准备好了,直接执行下面的安装命令即可:

deployment.yaml

Dashboard-Route.yaml

rabc.yaml

crd.yaml 自定义资源,插件等等…

svc.yaml

traefik是通过IngressRoute来定义访问入口匹配的(定义路由后即可通过路由中定义的域名访问)。并不需要再去创建ingress域名规则。

部署完成后我们可以通过在本地 /etc/hosts 中添加上域名 traefik.9l988.com 的映射即可访问 Traefik 的 Dashboard 页面了:

ACME

Traefik 通过扩展 CRD 的方式来扩展 Ingress 的功能,除了默认的用 Secret 的方式可以支持应用的 HTTPS 之外,还支持自动生成 HTTPS 证书。

示例1:

比如现在我们有一个如下所示的 whoami 应用:

定义svc和pod

定义访问路由

注意:traefik路由需要和匹配的svc在同一namespace下,否则不能访问

然后用who.qikqiak.com访问

示例2:

再定义一个访问本地grafana的路由

然后定义路由ingressRoute

修改ingress-svc, 对外暴露3000端口

在 IngressRoute 对象中我们定义了一些匹配规则,这些规则在 Traefik 中有如下定义方式:

然后通过 Secret 对象来引用证书文件:

这个时候我们就可以创建一个 HTTPS 访问应用的 IngressRoute 对象了:

创建完成后就可以通过 HTTPS 来访问应用了,由于我们是自签名的证书,所以证书是不受信任的

直接更新 Traefik 应用即可。更新完成后现在我们来修改上面我们的 whoami 应用:

中间件

中间件是 Traefik2.0 中一个非常有特色的功能,我们可以根据自己的各种需求去选择不同的中间件来满足服务,Traefik 官方已经内置了许多不同功能的中间件,其中一些可以修改请求,头信息,一些负责重定向,一些添加身份验证等等,而且中间件还可以通过链式组合的方式来适用各种情况。

同样比如上面我们定义的 whoami 这个应用,我们可以通过 https://who.9l988.com/tls 来访问到应用,但是如果我们用 http 来访问的话呢就不行了,就会404了,因为我们根本就没有简单80端口这个入口点,所以要想通过 http 来访问应用的话自然我们需要监听下 web 这个入口点:

强制跳转服务:http跳转https

然后将这个中间件附加到 http 的服务上面去,因为 https 的不需要跳转:

这个时候我们再去访问 http 服务可以发现就会自动跳转到 https 去了。关于更多中间件的用法可以查看文档 Traefik Docs

最后编辑:
作者:shooter
这个作者貌似有点懒,什么都没有留下。