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

单Ingress文件下在Ingress Controller中仅为单个应用配置OAuth规则的方法

解决方案

以下两种方案均满足所有应用声明保留在同一个Ingress文件中的约束。

方案1:同文件多Ingress资源(推荐)

该方案完全兼容官方OAuth注解,无需自定义NGINX配置,稳定性和可维护性最高。你可以在同一个YAML文件中定义多个Ingress资源,使用---分隔,每个Ingress资源负责同一个主机下的不同路径,OAuth相关注解仅写在需要认证的应用对应的Ingress资源上即可。
示例配置:

# 无需认证的公共应用Ingress配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: public-app-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: your-business-domain.com
    http:
      paths:
      - path: /public-app
        pathType: Prefix
        backend:
          service:
            name: public-app-svc
            port:
              number: 80
---
# 需要OAuth认证的私有应用Ingress配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: private-app-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    # 替换为你实际使用的OAuth配置注解,以下为OAuth2 Proxy的通用示例
    nginx.ingress.kubernetes.io/auth-url: "https://oauth2-proxy.your-domain.com/oauth2/auth"
    nginx.ingress.kubernetes.io/auth-signin: "https://oauth2-proxy.your-domain.com/oauth2/start?rd=$escaped_request_uri"
spec:
  rules:
  - host: your-business-domain.com
    http:
      paths:
      - path: /private-app
        pathType: Prefix
        backend:
          service:
            name: private-app-svc
            port:
              number: 80

NGINX Ingress Controller会自动合并同一个域名下所有Ingress资源的路径配置,每个Ingress的注解仅对自身包含的路径生效。

方案2:单Ingress资源配置(适用于必须单资源的场景)

如果你必须将所有路径写在同一个Ingress资源中,可以通过nginx.ingress.kubernetes.io/configuration-snippet注解强制覆盖特定路径的认证规则,全局开启OAuth后单独关闭公共路径的认证即可。
示例配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: all-in-one-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    # 全局配置OAuth认证
    nginx.ingress.kubernetes.io/auth-url: "https://oauth2-proxy.your-domain.com/oauth2/auth"
    nginx.ingress.kubernetes.io/auth-signin: "https://oauth2-proxy.your-domain.com/oauth2/start?rd=$escaped_request_uri"
    # 针对不需要认证的公共路径单独关闭认证
    nginx.ingress.kubernetes.io/configuration-snippet: |
      location ~ ^/public-app(/|$)(.*) {
        auth_basic off;
        auth_request off;
        proxy_pass http://upstream_balancer;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
      }
spec:
  rules:
  - host: your-business-domain.com
    http:
      paths:
      - path: /public-app
        pathType: Prefix
        backend:
          service:
            name: public-app-svc
            port:
              number: 80
      - path: /private-app
        pathType: Prefix
        backend:
          service:
            name: private-app-svc
            port:
              number: 80

注意:此方案需要熟悉NGINX配置规则,snippet优先级高于Ingress默认生成的location规则,需要保证路径匹配顺序符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:48:01