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

Kubernetes Ingress与OAuth2 Proxy集成出现500内部服务器错误求助

问题排查与解决方案

核心问题分析

出现500内部服务器错误的主要原因:

  • 主Ingress的auth-url和auth-signin指向https://appli-test.kube.fr/oauth2/*路径,但未为OAuth2 Proxy创建对应Ingress规则,导致Nginx Ingress Controller无法将这类请求转发到OAuth2 Proxy服务,触发500错误。
  • OAuth2 Proxy的ConfigMap存在多处配置错误,会直接导致认证流程失败。

分步修复方案

1. 为OAuth2 Proxy创建专属Ingress

新增Ingress规则,将/oauth2前缀的请求转发到OAuth2 Proxy的Service:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: oauth2-proxy-ingress
  namespace: h1  # 确保与OAuth2 Proxy在同一命名空间,不一致则调整
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  ingressClassName: nginx
  rules:
    - host: appli-test.kube.fr
      http:
        paths:
          - path: /oauth2
            pathType: Prefix
            backend:
              service:
                name: oauth2-proxy  # 替换为你的OAuth2 Proxy Service名称
                port:
                  number: 4180
  tls:
    - hosts:
        - appli-test.kube.fr
      secretName: test-tl  # 复用现有TLS证书Secret

2. 修正OAuth2 Proxy ConfigMap配置

ConfigMap存在多个错误,修正后内容如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: oauth2-proxy
  namespace: h1
data:
  oauth2_proxy.cfg: >
    provider = "oidc"
    redirect_url = "https://appli-test.kube.fr/oauth2/callback"  # 改为HTTPS,匹配Ingress的TLS配置
    oidc_issuer_url = "https://dev-xxxx.okta.com/oauth2/xxxx"
    upstreams = ["http://frontend.h1.svc.cluster.local:80", "http://backend.h1.svc.cluster.local:8800"]  # 指向集群内部Service的FQDN,避免外部请求循环
    email_domains = ["*"]
    pass_access_token = true
    skip_provider_button = true
    cookie_secure = true  # HTTPS环境下必须设置为true,否则Cookie无法正常生效
  • 移除client_id、client_secret、cookie_secret:这些已通过Deployment的环境变量从Secret读取,重复设置会导致冲突。
  • 修改redirect_url为HTTPS:主Ingress启用了TLS,回调地址必须与Ingress协议一致。
  • 修正upstreams:使用集群内部Service的FQDN(格式为服务名.命名空间.svc.cluster.local),避免请求循环到外部域名。
  • 添加cookie_secure = true:HTTPS环境下必须启用,保证Cookie传输安全。

3. 完善OAuth2 Proxy Deployment的端口配置

确保Deployment的容器端口与Service的targetPort匹配:

spec:
  containers:
    - args:
        - '--http-address=0.0.0.0:4180'
        - '--metrics-address=0.0.0.0:44180'
        - '--config=/etc/oauth2_proxy/oauth2_proxy.cfg'
      ports:
        - name: http
          containerPort: 4180
        - name: metrics
          containerPort: 44180
      # 保留原有的env配置...

注:可移除--https-address=0.0.0.0:4443,Ingress已处理TLS终止,内部流量用HTTP即可。

4. 验证配置并排查日志

  • 应用所有配置变更:
    kubectl apply -f oauth2-proxy-ingress.yaml
    kubectl apply -f oauth2-proxy-configmap.yaml
    kubectl rollout restart deployment oauth2-proxy -n h1
    
  • 查看Nginx Ingress Controller日志,确认请求转发情况:
    kubectl logs -n ingress-nginx deployment/ingress-nginx-controller
    
  • 查看OAuth2 Proxy日志,排查认证流程中的错误:
    kubectl logs -n h1 deployment/oauth2-proxy
    

额外检查项

  • 确认Okta控制台配置的回调地址与redirect_url完全一致(包括HTTPS)。
  • 确认OAuth2 Proxy的Service与Deployment的标签选择器匹配,确保流量能正确转发到Pod。
  • 检查集群内部DNS是否正常,确保OAuth2 Proxy能解析Okta的oidc_issuer_url。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:34:56