Kubernetes Google OAuth2 Войти - PullRequest
       35

Kubernetes Google OAuth2 Войти

0 голосов
/ 17 марта 2020

Я пытаюсь выяснить это некоторое время и, похоже, нигде не могу найти ответ. Возможно, у кого-то здесь возникнет идея.

Я развернул приложение в кластере Kubernetes (в GCP). Приложение в значительной степени представляет собой приложение типа микро-службы в одном домене. На данный момент я пытаюсь добиться аутентификации по всему домену через протоколы Google и OAuth2. Итак, у меня есть основное приложение в основном домене https://example.com, и почти каждый отдельный путь в этом домене будет отдельным K8s Service + Deployment. Так что это другой набор контейнеров для https://example.com/foo и другой для https://example.com/bar и, очевидно, другой набор контейнеров для основного https://example.com. Я не хочу «подключать» каждое отдельное приложение к Google по двум причинам:

  1. Мне потребуется, чтобы в каждом приложении был реализован протокол OAuth2, и
  2. токен предоставленное одним приложением будет недействительным для другого, поэтому пользователю потребуется входить в систему каждый раз, когда он / она изменяет URL-адрес, очень плохой UX, если вы спросите меня

Итак, я ' я пытаюсь настроить в кластере Kubernetes входной контроллер Nginx, который бы облегчил аутентификацию и проверял все входящие запросы, прежде чем они дойдут до любого из внутренних приложений. Вот в чем проблема ...

Мне удалось настроить OAuth2 Proxy в моем Nginx Ingress Controller, и пользователь может войти в систему. Весь поток OAuth2 работает. ОДНАКО, пользователь не обязан входить в систему. Пользователь может перейти к https://example.com, но ему / ей не потребуется иметь аутентификационного повара ie, предоставленного после успешного входа в систему через Google.

Вот мой конфиг YAML для Ingress:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/auth-url: "https://$host/oauth2/auth"
    nginx.ingress.kubernetes.io/auth-signin: "https://$host/oauth2/start?rd=$escaped_request_uri"
    kubernetes.io/ingress.class: "nginx"
    ingress.kubernetes.io/force-ssl-redirect: "true"
  name: example-com-ingress
  namespace: default
spec:
  tls:
    - hosts:
        - example.com
      secretName: example-com-tls
  rules:
  - host: example.com
    http:
      paths:
        - backend:
            serviceName: oauth2-proxy
            servicePort: http-proxy
          path: /oauth2
        - backend:
            serviceName: example-com-nginx-service
            servicePort: 80
          path: /

Есть идеи у кого-нибудь?

1 Ответ

0 голосов
/ 17 марта 2020

Убедитесь, что при настройке прокси-сервера oauth2 вы задали свой домен cook ie (установите --cookie-domain=example.com, чтобы разрешить чтение повара ie).

Вы также должны добавить whitelist-domain функция при настройке прокси-сервера oauth2:

--whitelist-domain=example.com

Затем необходимо создать входные объекты:

1. Открыть конечную точку /oauth2, посмотрите на пример ниже:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: oauth2-proxy
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          serviceName: oauth2-proxy
          servicePort: 4180
        path: /oauth2
  tls:
  - hosts:
    - example.com
    secretName: example-com-tls

2. Затем создайте вход для своего приложения:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-com-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/auth-url: "https://$host/oauth2/auth"
    nginx.ingress.kubernetes.io/auth-signin: "https://$host/oauth2/start?rd=$escaped_request_uri"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
  tls:
  - hosts:
      - example.com
    secretName: example-com-tls
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: example-com-nginx-service
          servicePort: 80

Очевидно, что можно создать два отдельных входа, но вы также можете создать только один с двумя определены бэкэнды, как вы хотели.

Взгляните сюда: nginx -ingress-controller-oauth2 , oauth2-dynamici c -callbacks , oauth2-proxy .

Еще раз убедитесь, что вы выполнили следующую инструкцию: external-OAUTH-аутентификация .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...