You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s+Ingress-Nginx+oauth2-proxy下如何传递Ingress URL至skip_auth_routes

解决Ingress URL传递给oauth2-proxy用于skip_auth_routes的方法

核心思路

要实现将Ingress的原始URL传递给oauth2-proxy并用于配置skip_auth_routes,关键是让Nginx Ingress在转发认证请求时,通过自定义请求头携带Ingress的主机或路径信息,再让oauth2-proxy基于这些头信息设置针对性的跳过规则。

具体操作步骤

1. 在Ingress中添加注解传递自定义请求头

在需要传递Ingress信息的Ingress资源里,新增nginx.ingress.kubernetes.io/auth-snippet注解,注入携带Ingress主机和路径的自定义请求头:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/auth-url: https://$host/oauth2/auth
    nginx.ingress.kubernetes.io/auth-snippet: |
      proxy_set_header X-Original-Ingress-Host $host;
      proxy_set_header X-Original-Ingress-Path $request_uri;
spec:
  # 你的Ingress路由规则配置

这里通过X-Original-Ingress-Host和X-Original-Ingress-Path两个请求头,把当前Ingress的主机名和用户请求的完整路径传递给oauth2-proxy。

2. 配置oauth2-proxy的skip_auth_routes规则

在oauth2-proxy的配置中,利用传递过来的请求头,编写精准的跳过认证规则:

# 以helm values.yaml为例
config:
  skip_auth_routes:
    - "^/oauth2/.*$"
    - "Header(`X-Original-Ingress-Host`, `app.example.com`) && Path(`/public/api/`)"
    - "Header(`X-Original-Ingress-Host`, `static.example.com`) && Path(`/`)"

也可以通过命令行参数直接设置:

--skip-auth-route="Header(`X-Original-Ingress-Host`, `app.example.com`) && Path(`/public/api/`)"

oauth2-proxy支持Host()、Path()、Header()等函数的组合匹配,这样就能指定特定Ingress下的路径跳过认证。

3. 验证请求头传递有效性

查看oauth2-proxy的日志,确认自定义请求头是否被正确接收:

[2023/04/20 11:53:41] ***.com GET - "/oauth2/auth" HTTP/1.1 "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" Headers: {"X-Original-Ingress-Host": ["app.example.com"], "X-Original-Ingress-Path": ["/public/api/"]}

如果日志中能看到上述自定义头信息,说明传递成功,对应的跳过规则即可生效。

注意事项

  • 确保oauth2-proxy默认允许转发这些自定义请求头,若有特殊配置,需检查pass_authorization_header等相关参数是否开启。
  • 规则语法需符合oauth2-proxy的要求,可参考其官方配置文档调整匹配逻辑。

内容的提问来源于stack exchange,提问作者Diego Jarillo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 13:45:12