Как я могу отладить oauth2_proxy при подключении к Azure B2 C? - PullRequest
0 голосов
/ 10 апреля 2020

Я новичок в Kubernetes, и я изучал Ingress. Я весьма впечатлен идеей обработки сертификатов TLS и аутентификации в точке Ingress. Я добавил простой файловый сервер stati c и добавил cert-manager, поэтому у меня в основном есть веб-сайт HTTPS stati c.

Я прочитал, что NGINX Ingress Controller можно использовать с oauth2 прокси для обработки аутентификации на входе. Проблема в том, что я не могу заставить это работать вообще. Я могу подтвердить, что моя служба развертывания oauth2-proxy и ее развертывание присутствуют и корректны - в журнале модуля я вижу запросы, поступающие с NGINX, но я не могу видеть, на что он на самом деле звонит Azure B2 C. Всякий раз, когда я пытаюсь получить доступ к своему сервису, я получаю Внутреннюю ошибку 500 - если я помещаю свой адрес / oath2 / auth в браузер, я получаю «Область действия« openid », указанная в запросе, не поддерживается». Однако, если я тестирую, запускаю пользовательский поток в Azure, тестовый URL также указывает «openid», и он функционирует, как и ожидалось.

Я думаю, что я мог бы работать через это, если бы я мог узнать, как контролировать то, что oauth2-прокси-запросы от Azure (т.е. работают там, где мой конфиг неверен, наблюдая за его URI) - в противном случае, возможно, кто-то, кто сделал это, может сказать мне, где я ошибся в конфиге.

Мой конфиг выглядит следующим образом:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    k8s-app: oauth2-proxy
  name: oauth2-proxy
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: oauth2-proxy
  template:
    metadata:
      labels:
        k8s-app: oauth2-proxy
    spec:
      containers:
      - args:
        - -provider=oidc
        - -email-domain=*
        - -upstream=file:///dev/null
        - -http-address=0.0.0.0:4180
        - -redirect-url=https://jwt.ms/
        - -oidc-issuer-url=https://<tenant>.b2clogin.com/tfp/<app-guid>/b2c_1_manager_signup/
        - -cookie-secure=true
        - -scope="openid"

        # Register a new application
        # https://github.com/settings/applications/new
        env:
        - name: OAUTH2_PROXY_CLIENT_ID
          value: <app-guid>
        - name: OAUTH2_PROXY_CLIENT_SECRET
          value: <key-base64>
        - name: OAUTH2_PROXY_COOKIE_SECRET
          value: <random+base64>
        image: quay.io/pusher/oauth2_proxy:latest
        imagePullPolicy: Always
        name: oauth2-proxy
        ports:
        - containerPort: 4180
          protocol: TCP
---

apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: oauth2-proxy
  name: oauth2-proxy
  namespace: default
spec:
  ports:
  - name: http
    port: 4180
    protocol: TCP
    targetPort: 4180
  selector:
    k8s-app: oauth2-proxy
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: static1-oauth2-proxy
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
spec:
  rules:
  - host: cloud.<mydomain>
    http:
      paths:
      - backend:
          serviceName: oauth2-proxy
          servicePort: 4180
        path: /oauth2
  tls:
  - hosts:
    - cloud.<mydomain>
    secretName: cloud-demo-crt

На моем входе в сайт c я добавил следующее в metadata.annotations:

    nginx.ingress.kubernetes.io/auth-url: "https://$host/oauth2/auth"
    nginx.ingress.kubernetes.io/auth-signin: "https://$host/oauth2/start?rd=$request_uri"

Я не уверен на 100%, являются ли эти аннотации всегда должен быть установлен как таковой, или я должен изменить их для B2C / OID C, но они, похоже, go от прокси, это просто то, что прокси делает дальше, что не получается.

Обратите внимание, что журнал действительно указывает, что oauth2-прокси, подключенный к B2 C, действительно, если uri эмитента изменяется, то он переходит в cra sh fallback l oop.

Кажется, что есть anumber статей о том, как настроить это, так что я уверен, что это возможно, но я немного потерял. Если бы кто-то мог помочь с настройкой или идеями для отладки, это было бы замечательно.

Спасибо.

Марк

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Я не совсем уверен насчет отладки, но в соответствии с вашей проблемой он не передает параметр заголовка.

При входе на сайт c, пожалуйста, добавьте его и попробуйте

nginx.ingress.kubernetes.io/auth-response-headers: X-Auth-Request-Access-Token, Authorization

Или этот

nginx.ingress.kubernetes.io/auth-response-headers: Authorization
0 голосов
/ 16 апреля 2020

Я не разобрался, как отлаживать исходящие вызовы oauth2_proxy, но быстрый взгляд на код показывает, что он не регистрирует это.

Оказывается, что я неправильно настроил область, в моем файле YAML, который я поместил:

        - -scope="openid"

В конце концов мне пришло в голову, что ошибка говорит, что область действия "openid" не поддерживается - трудно определить, но это наводит на мысль, что кавычки были передается как часть запроса области. Отказ от этого дает:

        - -scope=openid

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

Отметить

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