Сконфигурируйте istio для контейнера, который требует аутентификации basi c - PullRequest
1 голос
/ 17 апреля 2020

У меня есть контейнер, который запускает службу http / rest, для которой требуется базовый c auth. Я настроил istio для обслуживания запросов к этому контейнеру. Служба работает правильно в кластере без istio.

При запросе службы с помощью curl istio-envoy возвращается статус 401 и сообщение «Для доступа к этому ресурсу требуется полная аутентификация».

Я могу получите ту же ошибку, войдя в контейнер и запросив localhost без предоставленных данных аутентификации. Таким образом, судя по всему, istio не пересылает заголовок аутентификации basi c.

Журнал контейнера никогда не подтверждает попытку входа, я вижу только сообщение журнала 401 в контейнере посланника.

Я пробовал как с включенным, так и с отключенным mtls. Шлюз прослушивает порт 443 и пересылает службу на порт 80

. Как настроить istio для пересылки basi c auth в мой контейнер

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: mfm-gateway
  namespace: mfm-istio
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 443
      name: https
      protocol: HTTPS
    hosts:
      - dev-mfm-istio.testing.co.uk
    tls:
      mode: SIMPLE
      serverCertificate: /etc/istio/testing-co-uk-certs/tls.crt
      privateKey: /etc/istio/testing-co-uk-certs/tls.key
      caCertificates: /etc/istio/testing-co-uk-certs/ca.crt
      httpsRedirect: true
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: mfm-virtualservice
  namespace: mfm-istio
spec:
  hosts:
  - "dev-mfm-istio.testing.co.uk"
  gateways:
  - mfm-istio/mfm-gateway
  http:
  - name: "Auth"
    match:
    -  uri:
         prefix: "/auth"
    route:
    - destination:
        host: authentication-service.mfm-istio.svc.cluster.local
        port:
          number: 80
  - name: "Base"
    route:
    - destination:
        host: web-application-service.mfm-istio.svc.cluster.local
        port:
          number: 80
localhost: curl -ik https://dev-mfm-istio.testing.co.uk/auth/oauth/token -d username=admin -d password=lolpassword -d grant_type=password -d scope=a -H -u admin

HTTP/2 401 
pragma: no-cache
www-authenticate: Bearer realm="authentication-service", error="unauthorized", error_description="Full authentication is required to access this resource"
cache-control: no-store
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
x-frame-options: DENY
content-type: application/json;charset=UTF-8
date: Fri, 17 Apr 2020 13:51:43 GMT
x-envoy-upstream-service-time: 4
server: istio-envoy

{"error":"unauthorized","error_description":"Full authentication is required to access this resource"}

1 Ответ

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

AFAIK, если ваш контейнер имеет реализацию jwt с помощью весенней загрузки, отдельно от istio, вы должны добавить policy в istio, который определяет, какие методы аутентификации могут быть приняты в рабочей нагрузке (ях), и если аутентифицированы , какой метод / сертификат будет устанавливать субъект запроса.

Это должно позволить jwt из springboot выполнять аутентификацию в istio.


Полезные ссылки о политике istio для jwt.


Полезная ссылка об ошибке

{"error": "unauthorized", "error_description": "Для доступа к этому ресурсу требуется полная аутентификация"}


Чтобы точно проверить, что послужило причиной 401, при использовании аутентификации JWT вы можете выполнить следующую проблему github .

...