Аутентификация Istio JWT пропускает трафик без токена

Задний план:

Был аналогичный вопрос: Здесь, но он не предложил решение моей проблемы.

Я развернул приложение, которое работает должным образом в моем кластере Istio. Я хотел включить аутентификацию JWT, поэтому адаптировал инструкции Здесь к моему варианту использования.

входной шлюз:

Сначала я применил следующую политику к шлюзу istio-ingressgateway. Это сработало, и любой трафик, отправленный без токена JWT, был заблокирован.

kubectl apply -n istio-system -f mypolicy.yaml
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: core-api-policy
  namespace: istio-system
spec:
  targets:
  - name: istio-ingressgateway
    ports:
    - number: 80
  origins:
  - jwt:
      issuer: "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_pa9vj7sbL"
      jwksUri: "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_pa9vj7sbL/.well-known/jwks.json"
  principalBinding: USE_ORIGIN

Как только это сработало, я удалил эту политику и установил новую политику для своей службы.

kubectl delete -n istio-system -f mypolicy.yaml

сервис/ядро-апи-сервис:

После редактирования вышеуказанной политики, изменения пространства имен и цели, как показано ниже, я повторно применил политику к правильному пространству имен.

Политика:

kubectl apply -n solarmori -f mypolicy.yaml
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: core-api-policy
  namespace: solarmori
spec:
  targets:
  - name: core-api-service
    ports:
    - number: 80
  origins:
  - jwt:
      issuer: "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_pa9vj7sbL"
      jwksUri: "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_pa9vj7sbL/.well-known/jwks.json"
  principalBinding: USE_ORIGIN

Оказание услуг:

apiVersion: v1
kind: Service
metadata:
  name: core-api-service
spec:
  type: LoadBalancer
  ports:
  - port: 80
    name: api-svc-port
    targetPort: api-app-port
  selector:
    app: core-api-app

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

Я проверил istio-прокси моего развертывания службы, и в журналах не было создания local_jwks, как описано Здесь.

[procyclinsur@P-428 istio]$ kubectl logs -n solarmori core-api-app-5dd9666777-qhf5v -c istio-proxy | grep local_jwks
[procyclinsur@P-428 istio]$

Если кто-нибудь знает, где я ошибаюсь, я был бы очень признателен за любую помощь.

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
1
0
585
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

В вашем случае имя порта службы необходимо обновить до: <protocol>[-<suffix>] с <protocol> как:

  • grpc
  • http
  • http2
  • https
  • монго
  • mysql
  • редис
  • TCP
  • TLS
  • UDP

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

вау... вы могли бы подумать, что примечание, чтобы проверить это, будет в разделе устранения неполадок... потратил 2 дня, пытаясь заставить это работать! Спасибо!!

rustysys-dev 20.03.2019 02:37

Другие вопросы по теме