Вопрос политики ИСТИО - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть служба K8s Prometheus, которая использует два разных порта для сопоставления с одним и тем же targetPort, и я хотел бы применить политику аутентификации только к одному порту. Идея состоит в том, чтобы иметь возможность предоставлять сервис вне меша с помощью аутентификации jwt (используя шлюз / виртуальный сервис), а также иметь внутреннюю версию без аутентификации (мне это нужно, поскольку внутри меша есть клиент, который не поддерживает jwtаутентификация).

Хотя моя политика определяет цель как первый порт, политика затрагивает оба порта. Ниже приведены некоторые дополнительные сведения

  1. Служба

    Прометей-служба ClusterIP 10.233.31.30 9095 / TCP, 9090 / TCP 22d

Как видно, есть два порта 9095 и 9090, которые называются соответственно http-port1 и http-port-2

Policy

Ниже я создал политику, которая определяет цель только для первого порта, http-port1.

Name:         prometheus-auth-policy
Namespace:    powerone-ns
API Version:  authentication.istio.io/v1alpha1
Kind:         Policy
Spec:
  Origins:
    Jwt:
      Issuer:    testing@secure.istio.io
      Jwks Uri:  https://raw.githubusercontent.com/istio/istio/release-1.3/security/tools/jwt/samples/jwks.json
  Peers:
    Mtls:
  Principal Binding:  USE_ORIGIN
  Targets:
    Name:  prometheus-service
    Ports:
      Name:  http-port1

Используя команду istioctl, я вижу, чтополитика, кажется, применяется хорошо. Например, запустив команду . / Istioctl authn tls-check prometheus-bb6f66586-ffwml -n powerone-ns Я вижу, что моя политика применяется только к первой службе, а вторая использует толькопо умолчанию.

               HOST:PORT                                                            STATUS       SERVER        CLIENT                 AUTHN POLICY                             DESTINATION RULE
prometheus-service01.prometheus-service.svc.cluster.local:9090                       OK           mTLS          mTLS       prometheus-auth-policy/prometheus-service     default/prometheus-service
prometheus-service02.prometheus-service.svc.cluster.local:9095                       OK           HTTP/mTLS     mTLS       default/                                      default/pprometheus-service

Когда я запрашиваю службу на обоих портах, не сообщая ни о каком токене, я могу подключиться нормально, что неправильно, так как политика должна требовать токен JWT. Как только я удаляю второй порт, запрос завершается ошибкой с ожидаемой ошибкой 401 (аутентификация источника не удалась.), Поскольку я не сообщаю ни о каком токене. Поэтому кажется, что ISTIO не соблюдает целевую информацию в моей политике.

Я также попробовал вариант подхода. Я имею в виду, что вместо одного сервиса с двумя разными портами я создал два разных сервиса (по одному для каждого порта), но возникает одна и та же проблема.

С моей точки зрения это похоже на ошибку.

...