我正在尝试使用 oauth2_proxy 保护服务的状态页面,使用 Azure AD 作为外部身份验证提供程序。目前,如果我浏览到应用程序的公共(public) url ( https://sub.domain.com/service/hangfire ),我会收到 504 网关超时,它应该指示我进行身份验证。

我一直在遵循本指南以供引用:https://msazure.club/protect-kubernetes-webapps-with-azure-active-directory-aad-authentication/

如果我禁用指导身份验证的注释,我可以毫无问题地进入公共(public)状态页面。如果我浏览到 https://sub.domain.com/oauth2 ,我会收到一个提示,向我的提供者进行身份验证,这是我所期望的。我不确定入口配置的问题出在哪里,但我无法在网上、stackoverflow 或其他方面找到任何类似的案例。

在这种情况下,所有内容(oauth 部署、服务和入口规则)都位于“dev”命名空间中,除了实际的入口部署,它位于自己的命名空间中。我不怀疑这有什么不同,但 SSL 终止是由集群外的网关处理的。

oauth2 部署:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: oauth2-proxy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: oauth2-proxy
  template:
    metadata:
      labels:
        app: oauth2-proxy
    spec:
      containers:
      - name: oauth2-proxy
        image: quay.io/pusher/oauth2_proxy:v3.2.0
        imagePullPolicy: IfNotPresent
        args:
        - --provider=azure
        - --email-domain=domain.com
        - --upstream=http://servicename
        - --http-address=0.0.0.0:4180
        - --azure-tenant=id
        - --client-id=id
        - --client-secret=number
        env:
         - name: OAUTH2_PROXY_COOKIE_SECRET
           value: secret
        ports:
         - containerPort: 4180
           protocol : TCP
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: oauth2-proxy
  name: oauth2-proxy
spec:
  ports:
  - name: http
    port: 4180
    protocol: TCP
    targetPort: 4180
  selector:
    app: oauth2-proxy

入口规则:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: service-ingress1
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/auth-url: https://sub.domain.com/oauth2/auth"
    nginx.ingress.kubernetes.io/auth-signin: https://sub.domain.com/oauth2/start?rd=$https://sub.domain.com/service/hangfire"
spec:
  rules:
  - host: sub.domain.com
    http:
      paths:
      - path: /service/hangfire
        backend:
          serviceName: service
          servicePort: 80
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: service-oauth2-proxy
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: sub.domain.com
    http:
      paths:
      - path: /oauth2
        backend:
          serviceName: oauth2-proxy
          servicePort: 4180

当我浏览到 url 时出现 504 错误,但我在入口 pod 中没有看到任何错误。

最佳答案

我最终在这里找到了解决方案:https://github.com/helm/charts/issues/5958

我不得不使用内部服务地址作为 auth-url,这是我在其他任何地方都没有看到的。

nginx.ingress.kubernetes.io/auth-url: http://oauth2-proxy.development.svc.cluster.local:4180/oauth2/auth

关于Kubernetes nginx 入口 + oauth2 外部身份验证超时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56256562/

10-13 07:51