前言

Traefik 是一个现代的 HTTP 反向代理和负载均衡器,使部署微服务变得容易。

Traefik 可以与现有的多种基础设施组件(Docker、Swarm 模式、Kubernetes、Marathon、Consul、Etcd、Rancher、Amazon ECS...)集成,并自动和动态地配置自己。

系列文章:

今天我们基于 Traefik on K8S 来详细说明如何通过 forwardauth 实现认证功能,并通过 ForwardAuth 和 OAuth 2.0 或 CAS 进行集成。

ForwardAuth 中间件将身份验证委托给外部服务。如果服务响应代码为 2XX,则授予访问权限并执行原始请求。否则,将返回身份验证服务器的响应。

ForwardAuth 的简单配置

创建 ForwardAuth 中间件,具体如下:

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: forward-auth
spec:
forwardAuth:
# 路径视具体情况而定
address: http://your_auth_server/oauth2.0/validate
authResponseHeaders:
- Authorization
trustForwardHeader: true

另外一般出于安全,会再加一些安全相关的 header, 如下:

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: secure-header
spec:
headers:
browserXssFilter: true
contentTypeNosniff: true
customResponseHeaders:
Cache-Control: max-age=31536000
Pragma: no-cache
Set-Cookie: secure
forceSTSHeader: true
stsIncludeSubdomains: true
stsSeconds: 14400

当然,也是出于安全,会用到 HTTP 重定向到 HTTPS.

之后,创建 IngressRoute 的示例配置如下:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: alertmanager
spec:
routes:
- kind: Rule
match: Host(`ewhisper.cn`) && PathPrefix(`/alertmanager/`)
middlewares:
- name: redirectshttps
- name: secure-header
- name: forward-auth
services:
- name: alertmanager
port: 9093

完成!

使用 OAuth Proxy 和 Traefik ForwardAuth 集成

创建 ForwardAuth 401 错误的中间件

Traefik v2 ForwardAuth 中间件允许 Traefik 通过 oauth2-agent 的 /oauth2/auth 端点对每个请求进行身份验证,该端点只返回 202 Accepted 响应或401 Unauthorized的响应,而不代理整个请求。

oauth-errorsoauth-auth 中间件

---
# 用途:给 oauth url 加 headers
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: auth-headers
spec:
headers:
sslRedirect: true
stsSeconds: 315360000
browserXssFilter: true
contentTypeNosniff: true
forceSTSHeader: true
sslHost: ewhisper.cn
stsIncludeSubdomains: true
stsPreload: true
frameDeny: true
---
# 用途:forwardauth
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: oauth-auth
spec:
forwardAuth:
address: https://oauth.ewhisper.cn/oauth2/auth
trustForwardHeader: true
---
# 用途:forwardauth 返回 401-403 后重定向到登录页面
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: oauth-errors
spec:
errors:
status:
- "401-403"
service: oauth-backend
query: "/oauth2/sign_in"

oauth 的 IngressRoute 配置:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: oauth
spec:
routes:
- kind: Rule
match: "Host(`ewhisper.cn`, `oauth.ewhisper.cn`) && PathPrefix(`/oauth2/`)"
middlewares:
- name: auth-headers
services:
- name: oauth-backend
port: 4180

需要用到 oauth 的其他应用的 IngressRoute 配置:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: alertmanager
spec:
routes:
- kind: Rule
match: Host(`ewhisper.cn`) && PathPrefix(`/alertmanager/`)
middlewares:
- name: redirectshttps
- name: oauth-errors
- name: oauth-auth
services:
- name: alertmanager
port: 9093

完成!

️参考文档

EOF

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

最新文章

  1. Winform下CefSharp的引用、配置、实例与报错排除(源码)
  2. 阿里云服务器的坑=====部署EF+MVC
  3. Hive官方手册翻译(Getting Started)
  4. JavaWeb学习总结(五十一)——邮件的发送与接收原理
  5. 【Andorid------手势识别】GestureDetector和SimpleOnGestureListener的使用教程(转)——
  6. Linux命令echo -e
  7. esriControlsMousePointer 控制鼠标指针
  8. asp网站发布步骤总结
  9. BOM 之 screen history
  10. iOS UI控件继承关系图
  11. 逆波兰表达式 java
  12. 解决Sqlite UTF-8中文数据格式在DOS窗口下中文乱码
  13. Spring3.0.5 获取表中自增的主键(mysql)
  14. Python Tornado初学笔记之表单与模板(一)
  15. 单调队列——求m区间内的最小值
  16. eclipse 的缓存问题
  17. Python中的日志处理
  18. (后端)Java跨域过滤器
  19. November 09th, 2017 Week 45th Thursday
  20. [XPath] XPath 与 lxml (五)XPath 实例

热门文章

  1. TF-GNN踩坑记录(二)
  2. (数据科学学习手札144)使用管道操作符高效书写Python代码
  3. 齐博X1-新建一个空模板并在后台选择
  4. 齐博x1更新了 提供一个部分用户期待已久的功能,修改主题后变为待审
  5. C# Linq 查询汇总
  6. 论文笔记 - SIMILAR: Submodular Information Measures Based Active Learning In Realistic Scenarios
  7. Codeforces Round #805 (Div. 3)G2. Passable Paths
  8. java安全之CC1浅学(1)
  9. day15-Servlet04
  10. networkQuality