前言

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 中间件,具体如下:

  1. apiVersion: traefik.containo.us/v1alpha1
  2. kind: Middleware
  3. metadata:
  4. name: forward-auth
  5. spec:
  6. forwardAuth:
  7. # 路径视具体情况而定
  8. address: http://your_auth_server/oauth2.0/validate
  9. authResponseHeaders:
  10. - Authorization
  11. trustForwardHeader: true

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

  1. apiVersion: traefik.containo.us/v1alpha1
  2. kind: Middleware
  3. metadata:
  4. name: secure-header
  5. spec:
  6. headers:
  7. browserXssFilter: true
  8. contentTypeNosniff: true
  9. customResponseHeaders:
  10. Cache-Control: max-age=31536000
  11. Pragma: no-cache
  12. Set-Cookie: secure
  13. forceSTSHeader: true
  14. stsIncludeSubdomains: true
  15. stsSeconds: 14400

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

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

  1. apiVersion: traefik.containo.us/v1alpha1
  2. kind: IngressRoute
  3. metadata:
  4. name: alertmanager
  5. spec:
  6. routes:
  7. - kind: Rule
  8. match: Host(`ewhisper.cn`) && PathPrefix(`/alertmanager/`)
  9. middlewares:
  10. - name: redirectshttps
  11. - name: secure-header
  12. - name: forward-auth
  13. services:
  14. - name: alertmanager
  15. port: 9093

完成!

使用 OAuth Proxy 和 Traefik ForwardAuth 集成

创建 ForwardAuth 401 错误的中间件

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

oauth-errorsoauth-auth 中间件

  1. ---
  2. # 用途:给 oauth url 加 headers
  3. apiVersion: traefik.containo.us/v1alpha1
  4. kind: Middleware
  5. metadata:
  6. name: auth-headers
  7. spec:
  8. headers:
  9. sslRedirect: true
  10. stsSeconds: 315360000
  11. browserXssFilter: true
  12. contentTypeNosniff: true
  13. forceSTSHeader: true
  14. sslHost: ewhisper.cn
  15. stsIncludeSubdomains: true
  16. stsPreload: true
  17. frameDeny: true
  18. ---
  19. # 用途:forwardauth
  20. apiVersion: traefik.containo.us/v1alpha1
  21. kind: Middleware
  22. metadata:
  23. name: oauth-auth
  24. spec:
  25. forwardAuth:
  26. address: https://oauth.ewhisper.cn/oauth2/auth
  27. trustForwardHeader: true
  28. ---
  29. # 用途:forwardauth 返回 401-403 后重定向到登录页面
  30. apiVersion: traefik.containo.us/v1alpha1
  31. kind: Middleware
  32. metadata:
  33. name: oauth-errors
  34. spec:
  35. errors:
  36. status:
  37. - "401-403"
  38. service: oauth-backend
  39. query: "/oauth2/sign_in"

oauth 的 IngressRoute 配置:

  1. apiVersion: traefik.containo.us/v1alpha1
  2. kind: IngressRoute
  3. metadata:
  4. name: oauth
  5. spec:
  6. routes:
  7. - kind: Rule
  8. match: "Host(`ewhisper.cn`, `oauth.ewhisper.cn`) && PathPrefix(`/oauth2/`)"
  9. middlewares:
  10. - name: auth-headers
  11. services:
  12. - name: oauth-backend
  13. port: 4180

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

  1. apiVersion: traefik.containo.us/v1alpha1
  2. kind: IngressRoute
  3. metadata:
  4. name: alertmanager
  5. spec:
  6. routes:
  7. - kind: Rule
  8. match: Host(`ewhisper.cn`) && PathPrefix(`/alertmanager/`)
  9. middlewares:
  10. - name: redirectshttps
  11. - name: oauth-errors
  12. - name: oauth-auth
  13. services:
  14. - name: alertmanager
  15. port: 9093

完成!

️参考文档

EOF

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

基于 Traefik 的 ForwardAuth 配置的更多相关文章

  1. 基于注解的bean配置

    基于注解的bean配置,主要是进行applicationContext.xml配置.DAO层类注解.Service层类注解. 1.在applicationContext.xml文件中配置信息如下 &l ...

  2. 基于ZK构建统一配置中心的方案和实践

    背景: 近期使用Zk实现了一个简单的配置管理的小东西,在此开源出来,有兴趣的希望提出您的宝贵意见.如果恰巧您也使用或者接触过类似的东西, 也希望您可以分享下您觉得现在这个项目可以优化和改进的地方. 项 ...

  3. Struts2基于注解的Action配置

    使用注解来配置Action的最大好处就是可以实现零配置,但是事务都是有利有弊的,使用方便,维护起来就没那么方便了. 要使用注解方式,我们必须添加一个额外包:struts2-convention-plu ...

  4. 缓存初解(五)---SpringMVC基于注解的缓存配置--web应用实例

    之前为大家介绍了如何使用spring注解来进行缓存配置 (EHCache 和 OSCache)的简单的例子,详见 Spring基于注解的缓存配置--EHCache AND OSCache 现在介绍一下 ...

  5. 缓存初解(三)---Spring3.0基于注解的缓存配置+Ehcache和OScache

    本文将构建一个普通工程来说明spring注解缓存的使用方式,关于如何在web应用中使用注解缓存,请参见: Spring基于注解的缓存配置--web应用实例 一.简介 在spring的modules包中 ...

  6. Spring IoC — 基于Java类的配置

    普通的POJO只要标注@Configuration注解,就可以为Spring容器提供Bean定义的信息了,每个标注了@Bean的类方法都相当于提供一个Bean的定义信息. 基于Java类的配置方法和基 ...

  7. Spring IOC之基于注解的容器配置

    Spring配置中注解比XML更好吗?基于注解的配置的介绍提出的问题是否这种途径比XML更好.简单来说就是视情况而定. 长一点的答案是每一种方法都有自己的长处也不足,而且这个通常取决于开发者决定哪一种 ...

  8. springmvc国际化 基于请求的国际化配置

    springmvc国际化 基于请求的国际化配置 基于请求的国际化配置是指,在当前请求内,国际化配置生效,否则自动以浏览器为主. 项目结构图: 说明:properties文件中为国际化资源文件.格式相关 ...

  9. 基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)

    基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)   前言 前几天对Apollo配置中心的demo进行一个部署试用,现公司已决定使用,这两天进行分布式部署的时候 ...

  10. 基于create-react-app的再配置

    前面的话 使用Facebook官方推出的create-react-app脚手架,我们基本可以零配置搭建基于webpack的React开发环境.但是,如果需要个性化定制,则还需要基于create-rea ...

随机推荐

  1. @input含义和用法

    @input :一般用于监听事件只要输入的值变化了就会触发input 示例: <div id="div1"> <input type="text&quo ...

  2. 【Spring boot】启动过程源码分析

    启动过程结论 推测web应用类型. spi的方式获取BootstrapRegistryInitializer.ApplicationContextInitializer.ApplicationCont ...

  3. HDU1423 Greatest Common Increasing Subsequence (DP优化)

    LIS和LCS的结合. 容易写出方程,复杂度是nm2,但我们可以去掉一层没有必要的枚举,用一个变量val记录前一阶段的最优解,这样优化成nm. 1<=k<j,j增加1,k的上界也增加1,就 ...

  4. C语言常见的八大排序(详解)

    冒泡排序 优点:写起来简单 缺点:运算量过大每两个之间就要比较一次 冒泡排序在一组需要排序的数组中,对两两数据顺序与要求顺序相反时,交换数据,使大的数据往后移,每趟排序将最大的数放在最后的位置上 如下 ...

  5. 【算法】基础DP

    参考资料 背包九讲 一.线性DP 如果现在在状态 i 下,它上一步可能的状态是什么. 上一步不同的状态依赖于什么. 根据上面的分析,分析出状态和转移方程.注意:dp 不一定只有两维或者一维,一开始设计 ...

  6. SpringBoot框架SpEL表达式注入漏洞复现与原理分析

    前言 这是2016年的一个洞,利用条件是至少知道一个触发 springboot 默认错误页面的接口及参数名. 影响版本:1.1.0-1.1.12 1.2.0-1.2.7 1.3.0 修复方案:升级版本 ...

  7. Mysql索引(究极无敌细节版)

    参考了: https://www.jianshu.com/p/ace3cd6526c4 推荐up主https://space.bilibili.com/377905911 推荐书籍<mysql是 ...

  8. js判断手机系统是android还是ios?

    var u = navigator.userAgent; //识别各种浏览器 var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Ad ...

  9. 二十三、Pod的service介绍

    Pod 的 Service 介绍 一.Service 介绍 Kubernetes Service 定义了这样一种抽象: 一个 Pod 的逻辑分组,一种可以访问它们的策略,通常称为微服务. 这一组 Po ...

  10. Nginx配置-1

    1.绑定nginx到指定cpu [root@nginx conf.d]# vim /apps/nginx/conf/nginx.conf worker_processes 2; worker_cpu_ ...