Почему аутентификация Istio блокирует доступ к приложению

У меня есть конфигурация, которая выглядит следующим образом:

AGW (маршрутизация на основе путей) --> ingress-gateway в пространстве имен --> маршрутизация virtualservice --> service --> pod

Когда я пытаюсь получить доступ к своему приложению через веб, я вижу в журналах входящих сообщений, что трафик направляется в нужную службу:

Но соединение никогда не достигает модуля приложения. В модуле приложения ничего не регистрируется.

Где-то оно блокируется. Я вижу, что передается токен носителя

Может ли кто-нибудь помочь мне, что может блокировать это?

Спасибо

Пытался использовать разные префиксы маршрутизации и все такое. Но это не работает. Кроме того, похожий тип виртуальных служб уже существует в том же пространстве имен с другими префиксами для других модулей API, и это работает нормально

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: myapp-ingressgateway
  namespace: myapp
spec:
  selector:
    istio: myapp-ingressgateway
  servers:
  - hosts:
    - '*'
    port:
      name: https
      number: 443
      protocol: HTTPS
    tls:
      mode: SIMPLE
      privateKey: /etc/istio/ingressgateway-certs/tls.key
      serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: myapp-ingress-api
  namespace: myapp
spec:
  gateways:
  - myapp-ingressgateway
  hosts:
  - '*'
  http:
  - match:
    - uri:
        prefix: /myapp/api/
    route:
    - destination:
        host: myapp-api
        port:
          number: 80
    timeout: 300s
  - match:
    - uri:
        prefix: /myapp/api/swagger
    route:
    - destination:
        host: myapp-api
        port:
          number: 80
    timeout: 300s
[2024-07-31T11:24:40.680Z] "GET /myapp/api/
HTTP/1.1" 401 - via_upstream - "-" 0 0 7 - "4.234.105.139, 10.122.1.85:37460,10.111.212.48" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0" "a2705e5b-d656-45c6-b460-f22efbea2ed0" "dev.org.com" "172.0.0.201:8080" outbound|80||
myapp-api.myapp.svc.cluster.local
172.0.0.206:56840 172.0.0.206:8443 10.111.212.48:2851 dev.org.com -
$  curl -I -X GET https://dev.org.com/myapp/api/swagger/index.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0HTTP/1.1 401 Unauthorized
Date: Thu, 01 Aug 2024 05:31:50 GMT
Content-Length: 0
Connection: keep-alive
www-authenticate: Bearer
request-context: appId=cid-v1:f1aff90d-ee54-470b-8bc2-9361f3b3bf52
strict-transport-security: max-age=31536000; includeSubDomains
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
content-security-policy: default-src 'self' 'unsafe-inline' 'unsafe-eval' 
x-frame-options: SAMEORIGIN
Аверкий
Вопрос задан22 августа 2024 г.

1 Ответ

2

Почему аутентификация Istio блокирует доступ к приложению

Istio — мощная платформа для управления сервисами, которая предоставляет широкие возможности по аутентификации и авторизации. Однако, иногда эта аутентификация может стать препятствием для доступа к приложениям, если не настроена правильно.

Основные причины блокировки доступа

Вот несколько причин, по которым аутентификация Istio может блокировать доступ к приложению:

1. Отсутствие правил аутентификации

Если в Istio не настроены правила аутентификации для конкретного приложения, то по умолчанию доступ к нему будет заблокирован.

Необходимо указать правила аутентификации в конфигурации Istio, чтобы разрешить доступ к приложению для определенных пользователей или сервисов.

2. Неправильная конфигурация правил

Если правила аутентификации настроены неправильно, например, неверный идентификатор пользователя, неправильный токен JWT или неверный идентификатор сервиса, то доступ к приложению будет заблокирован.

Проверьте конфигурацию правил аутентификации и убедитесь, что они правильно соответствуют идентификаторам и токенам пользователя и сервисов.

3. Проблемы с сертификатами

Если используется TLS-аутентификация, то проблемы с сертификатами (неверный сертификат, просроченный сертификат, неверный конфигурационный файл) могут привести к блокировке доступа.

Проверьте сертификаты, используемые в Istio, и убедитесь, что они действительны и правильно настроены.

4. Проблемы с токен-сервисом

Если используется токен-сервис для генерации JWT-токенов, то проблемы с этим сервисом (недоступность, ошибки в генерации токенов) могут привести к блокировке доступа.

Проверьте доступность токен-сервиса и убедитесь, что он корректно генерирует JWT-токены.

5. Проблемы с сетями

Проблемы с сетевой конфигурацией (например, брэндмауэр блокирует соединение, неверный IP-адрес сервиса) также могут привести к блокировке доступа.

Проверьте сетевую конфигурацию и убедитесь, что Istio и приложение могут корректно взаимодействовать по сети.

Примеры конфигурации

1. Аутентификация с помощью JWT-токенов

Пример конфигурации Istio с аутентификацией с помощью JWT-токенов:

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: authz-policy
spec:
  selector:
    matchLabels:
      app: my-app
  rules:
  - from:
    - source:
        namespaces:
        - default
      users:
      - "joe@example.com"
  action: ALLOW

В этом примере настраивается политика авторизации для приложения `my-app`. Доступ к приложению разрешен только для пользователя `joe@example.com`.

JWT-токен должен содержать информацию о пользователе (например, идентификатор `sub` с значением `joe@example.com`).

2. Аутентификация с помощью TLS-сертификатов

Пример конфигурации Istio с аутентификацией с помощью TLS-сертификатов:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-app
spec:
  hosts:
  - my-app
  http:
  - match:
      - uri:
          prefix: /
    route:
    - destination:
        host: my-app
        port:
          number: 8080
      timeout: 300s
  tls:
  - mode: SIMPLE
    credentialName: my-app-cert

В этом примере настраивается виртуальный сервис `my-app`. В конфигурации TLS указывается имя кредита `my-app-cert`.

В конфигурации `Secret` должны быть указаны сертификат и ключ, необходимые для TLS-аутентификации.

Блокировка доступа к приложению из-за аутентификации Istio может быть вызвана разными причинами. Тщательно проверьте конфигурацию Istio, сертификаты, токен-сервис и сетевые настройки. Используйте инструменты отладки и журналы Istio для выявления и решения проблем.

Михаил
Ответ получен1 сентября 2024 г.

Ваш ответ

Загрузить файл.