GKE Nginx 入口控制器 Oauth2 代理重定向

时间:2021-05-14 10:16:52

标签: nginx oauth-2.0 google-kubernetes-engine

我正在尝试使用 oauth2-proxy 向我的集群添加身份验证。我在本地进行了测试并按预期工作:当我转到登录页面时,它会将我重定向到一个 IP,例如 GitHub。登录后,我被重定向到我的页面,一切都按预期工作。出于某种奇怪的原因,当从本地移植到 google 云中的集群时,我没有重定向到 GitHub 进行身份验证。 我有两个入口,一个用于 oauth2-proxy (ingress-oauth2-proxy),另一个用于所有应用程序 (ingress-apps)。我添加了 Nginx 注释,但仍然没有。

这里是用于创建入口规则的入口 YAML 文件

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    acme.cert-manager.io/http01-edit-in-place: "true"
    ingress.kubernetes.io/force-ssl-redirect: "true"
    ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/auth-url: "https://auth.example.com/oauth2/auth"
    nginx.ingress.kubernetes.io/auth-signin: "https://auth.exmaple.com/oauth2/start?rd=$escaped_request_uri"
    cert-manager.io/cluster-isuer: letsecnrypt-prod
    nginx.ingress.kubernetes.io/rewrite-target: $/1
  name: ingress-apps
  namespace: default
spec:
  rules:
  - host: echo.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: echo1
          servicePort: 80
  tls:
    - hosts:
      - echo.exmaple.com
      secretName: echo-tls-cert
---

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-oauth2-proxy
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
    acme.cert-manager.io/http01-edit-in-place: "true"
    ingress.kubernetes.io/force-ssl-redirect: "true"
    ingress.kubernetes.io/ssl-redirect: "true"
spec:
  rules:
  - host: auth.exmaple.com
    http:
      paths:
      - backend:
          serviceName: oauth2-proxy
          servicePort: 4180
        path: /oauth2
  tls:
    - hosts:
      - auth.exmaple.com
      secretName: auth-tls-cert

我检查了 OAuth 代理的日志,当我转到 echo.example.com 时什么也没有发生。如果我向 auth.example.com/oauth2 发出请求,我会按预期重定向到 IP 登录页面,在这种情况下是 GitHub。

我错过了什么吗?

注意:我检查过,两个入口都被应用了。

1 个答案:

答案 0 :(得分:0)

好的,我想通了:问题出在使用的 Ingress 控制器上。我从 repo helm.nginx.com/stable 安装了 Nginx 控制器,它是 nginxinc 并且不支持注释。因此,他们被忽视了。为了修复它,我只使用了 kubernetes.github.io/ingress-nginx/deploy/#gce-gke。在这里可以更好地解释Nginx ingress controller authentication not working

干杯! :)